diff --git a/contracts/guard/src/GuardV0.sol b/contracts/guard/src/GuardV0.sol index bc55b4d7..9013f0b6 100644 --- a/contracts/guard/src/GuardV0.sol +++ b/contracts/guard/src/GuardV0.sol @@ -285,6 +285,10 @@ contract GuardV0 is IGuard, Ownable { validate_approve(callData); } else if(selector == getSelector("approveDelegation(address,uint256)")) { validate_approveDelegation(callData); + } else if(selector == getSelector("supply(address,uint256,address,uint16)")) { + validate_aaveSupply(callData); + } else if(selector == getSelector("withdraw(address,uint256,address)")) { + validate_aaveWithdraw(callData); } else { revert("Unknown function selector"); } @@ -365,9 +369,9 @@ contract GuardV0 is IGuard, Ownable { } else if (selector == getSelector("transferERC20AllIn(address)")) { validate_transferERC20AllIn(subCallData); } else if (selector == getSelector("deposit(address,address)")) { - validate_deposit(subCallData); + validate_1deltaDeposit(subCallData); } else if (selector == getSelector("withdraw(address,address)")) { - validate_withdraw(subCallData); + validate_1deltaWithdraw(subCallData); } else if (selector == getSelector("flashSwapExactIn(uint256,uint256,bytes)")) { validate_flashSwapExactInt(subCallData); } else if (selector == getSelector("flashSwapExactOut(uint256,uint256,bytes)")) { @@ -395,7 +399,7 @@ contract GuardV0 is IGuard, Ownable { } // 1delta implementation: https://github.com/1delta-DAO/contracts-delegation/blob/4f27e1593c564c419ff042cdd932ed52d04216bf/contracts/1delta/modules/aave/FlashAggregator.sol#L34-L39 - function validate_deposit(bytes memory callData) public view { + function validate_1deltaDeposit(bytes memory callData) public view { (address token, address receiver) = abi.decode(callData, (address, address)); require(isAllowedAsset(token), "validate_transferERC20AllIn: Token not allowed"); @@ -403,7 +407,7 @@ contract GuardV0 is IGuard, Ownable { } // 1delta: https://github.com/1delta-DAO/contracts-delegation/blob/4f27e1593c564c419ff042cdd932ed52d04216bf/contracts/1delta/modules/aave/FlashAggregator.sol#L71-L74 - function validate_withdraw(bytes memory callData) public view { + function validate_1deltaWithdraw(bytes memory callData) public view { (address token, address receiver) = abi.decode(callData, (address, address)); require(isAllowedAsset(token), "validate_withdraw: Token not allowed"); @@ -468,4 +472,27 @@ contract GuardV0 is IGuard, Ownable { // Reference in 1delta tests: https://github.com/1delta-DAO/contracts-delegation/blob/4f27e1593c564c419ff042cdd932ed52d04216bf/test-ts/1delta/aave/marginSwap.spec.ts#L206 allowDelegationApprovalDestination(brokerProxy, notes); } + + // Aave V3 implementation: https://github.com/aave/aave-v3-core/blob/e0bfed13240adeb7f05cb6cbe5e7ce78657f0621/contracts/protocol/pool/Pool.sol#L145 + function validate_aaveSupply(bytes memory callData) public view { + (address token, , , ) = abi.decode(callData, (address, uint, address, uint)); + + require(isAllowedAsset(token), "Token not allowed"); + // require(isAllowedReceiver(wallet), "Receiver address not whitelisted by Guard"); + } + + // Aave V3 implementation: https://github.com/aave/aave-v3-core/blob/e0bfed13240adeb7f05cb6cbe5e7ce78657f0621/contracts/protocol/pool/Pool.sol#L198 + function validate_aaveWithdraw(bytes memory callData) public view { + (address token, , address to) = abi.decode(callData, (address, uint, address)); + + require(isAllowedAsset(token), "Token not allowed"); + require(isAllowedReceiver(to), "Receiver address not whitelisted by Guard"); + } + + function whitelistAaveV3(address lendingPool, string calldata notes) external { + allowCallSite(lendingPool, getSelector("supply(address,uint256,address,uint16)"), notes); + allowCallSite(lendingPool, getSelector("withdraw(address,uint256,address)"), notes); + + allowApprovalDestination(lendingPool, notes); + } } \ No newline at end of file diff --git a/eth_defi/aave_v3/constants.py b/eth_defi/aave_v3/constants.py index 512ab61f..b1372ab0 100644 --- a/eth_defi/aave_v3/constants.py +++ b/eth_defi/aave_v3/constants.py @@ -229,3 +229,13 @@ class AaveVersion(enum.Enum): # https://github.com/aave/aave-v3-core/blob/e0bfed13240adeb7f05cb6cbe5e7ce78657f0621/contracts/protocol/libraries/logic/SupplyLogic.sol#L123 # 115792089237316195423570985008687907853269984665640564039457584007913129639935 MAX_AMOUNT = 2**256 - 1 + +# https://docs.aave.com/developers/deployed-contracts/v3-mainnet +AAVE_V3_DEPLOYMENTS = { + "ethereum": { + "pool": "0x87870Bca3F3fD6335C3F4ce8392D69350B4fA4E2", + }, + "arbitrum": { + "pool": "0x794a61358D6845594F94dc1DB02A252b5b4814aD", + }, +} diff --git a/eth_defi/aave_v3/loan.py b/eth_defi/aave_v3/loan.py index 2a6ebeee..c61d8b85 100644 --- a/eth_defi/aave_v3/loan.py +++ b/eth_defi/aave_v3/loan.py @@ -1,4 +1,5 @@ """Aave v3 loan""" + from eth_typing import HexAddress from web3.contract.contract import Contract, ContractFunction diff --git a/eth_defi/abi/guard/GuardV0.json b/eth_defi/abi/guard/GuardV0.json index 422594d0..354cfc53 100644 --- a/eth_defi/abi/guard/GuardV0.json +++ b/eth_defi/abi/guard/GuardV0.json @@ -1 +1 @@ -{"abi":[{"type":"constructor","inputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"allowApprovalDestination","inputs":[{"name":"destination","type":"address","internalType":"address"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"allowAsset","inputs":[{"name":"asset","type":"address","internalType":"address"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"allowCallSite","inputs":[{"name":"target","type":"address","internalType":"address"},{"name":"selector","type":"bytes4","internalType":"bytes4"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"allowDelegationApprovalDestination","inputs":[{"name":"destination","type":"address","internalType":"address"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"allowReceiver","inputs":[{"name":"receiver","type":"address","internalType":"address"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"allowSender","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"allowWithdrawDestination","inputs":[{"name":"destination","type":"address","internalType":"address"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"allowedApprovalDestinations","inputs":[{"name":"destination","type":"address","internalType":"address"}],"outputs":[{"name":"allowed","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"allowedAssets","inputs":[{"name":"token","type":"address","internalType":"address"}],"outputs":[{"name":"allowed","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"allowedCallSites","inputs":[{"name":"target","type":"address","internalType":"address"},{"name":"selector","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"allowed","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"allowedDelegationApprovalDestinations","inputs":[{"name":"destination","type":"address","internalType":"address"}],"outputs":[{"name":"allowed","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"allowedReceivers","inputs":[{"name":"receiver","type":"address","internalType":"address"}],"outputs":[{"name":"allowed","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"allowedSenders","inputs":[{"name":"sender","type":"address","internalType":"address"}],"outputs":[{"name":"allowed","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"allowedWithdrawDestinations","inputs":[{"name":"destination","type":"address","internalType":"address"}],"outputs":[{"name":"allowed","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"callSiteCount","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getGovernanceAddress","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"getInternalVersion","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"uint8"}],"stateMutability":"pure"},{"type":"function","name":"isAllowedApprovalDestination","inputs":[{"name":"receiver","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isAllowedAsset","inputs":[{"name":"token","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isAllowedCallSite","inputs":[{"name":"target","type":"address","internalType":"address"},{"name":"selector","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isAllowedDelegationApprovalDestination","inputs":[{"name":"receiver","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isAllowedReceiver","inputs":[{"name":"receiver","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isAllowedSender","inputs":[{"name":"sender","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isAllowedWithdrawDestination","inputs":[{"name":"receiver","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"removeApprovalDestination","inputs":[{"name":"destination","type":"address","internalType":"address"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"removeAsset","inputs":[{"name":"asset","type":"address","internalType":"address"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"removeCallSite","inputs":[{"name":"target","type":"address","internalType":"address"},{"name":"selector","type":"bytes4","internalType":"bytes4"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"removeDelegationApprovalDestination","inputs":[{"name":"destination","type":"address","internalType":"address"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"removeReceiver","inputs":[{"name":"receiver","type":"address","internalType":"address"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"removeSender","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"removeWithdrawDestination","inputs":[{"name":"destination","type":"address","internalType":"address"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"validate1deltaPath","inputs":[{"name":"path","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"validateCall","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"target","type":"address","internalType":"address"},{"name":"callDataWithSelector","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"validateUniswapV3Path","inputs":[{"name":"path","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"validate_1deltaMulticall","inputs":[{"name":"callData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"validate_approve","inputs":[{"name":"callData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"validate_approveDelegation","inputs":[{"name":"callData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"validate_deposit","inputs":[{"name":"callData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"validate_exactInput","inputs":[{"name":"callData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"validate_exactOutput","inputs":[{"name":"callData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"validate_flashSwapAllOut","inputs":[{"name":"callData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"validate_flashSwapExactInt","inputs":[{"name":"callData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"validate_flashSwapExactOut","inputs":[{"name":"callData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"validate_swapExactTokensForTokens","inputs":[{"name":"callData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"validate_transfer","inputs":[{"name":"callData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"validate_transferERC20AllIn","inputs":[{"name":"callData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"validate_transferERC20In","inputs":[{"name":"callData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"validate_withdraw","inputs":[{"name":"callData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"whitelistOnedelta","inputs":[{"name":"brokerProxy","type":"address","internalType":"address"},{"name":"lendingPool","type":"address","internalType":"address"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"whitelistToken","inputs":[{"name":"token","type":"address","internalType":"address"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"whitelistTokenForDelegation","inputs":[{"name":"token","type":"address","internalType":"address"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"whitelistUniswapV2Router","inputs":[{"name":"router","type":"address","internalType":"address"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"whitelistUniswapV3Router","inputs":[{"name":"router","type":"address","internalType":"address"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"ApprovalDestinationApproved","inputs":[{"name":"sender","type":"address","indexed":false,"internalType":"address"},{"name":"notes","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"ApprovalDestinationRemoved","inputs":[{"name":"sender","type":"address","indexed":false,"internalType":"address"},{"name":"notes","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"AssetApproved","inputs":[{"name":"sender","type":"address","indexed":false,"internalType":"address"},{"name":"notes","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"AssetRemoved","inputs":[{"name":"sender","type":"address","indexed":false,"internalType":"address"},{"name":"notes","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"CallSiteApproved","inputs":[{"name":"target","type":"address","indexed":false,"internalType":"address"},{"name":"selector","type":"bytes4","indexed":false,"internalType":"bytes4"},{"name":"notes","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"CallSiteRemoved","inputs":[{"name":"target","type":"address","indexed":false,"internalType":"address"},{"name":"selector","type":"bytes4","indexed":false,"internalType":"bytes4"},{"name":"notes","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"DelegationApprovalDestinationApproved","inputs":[{"name":"sender","type":"address","indexed":false,"internalType":"address"},{"name":"notes","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"DelegationApprovalDestinationRemoved","inputs":[{"name":"sender","type":"address","indexed":false,"internalType":"address"},{"name":"notes","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"ReceiverApproved","inputs":[{"name":"sender","type":"address","indexed":false,"internalType":"address"},{"name":"notes","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"ReceiverRemoved","inputs":[{"name":"sender","type":"address","indexed":false,"internalType":"address"},{"name":"notes","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"SenderApproved","inputs":[{"name":"sender","type":"address","indexed":false,"internalType":"address"},{"name":"notes","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"SenderRemoved","inputs":[{"name":"sender","type":"address","indexed":false,"internalType":"address"},{"name":"notes","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"WithdrawDestinationApproved","inputs":[{"name":"sender","type":"address","indexed":false,"internalType":"address"},{"name":"notes","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"WithdrawDestinationRemoved","inputs":[{"name":"sender","type":"address","indexed":false,"internalType":"address"},{"name":"notes","type":"string","indexed":false,"internalType":"string"}],"anonymous":false}],"bytecode":{"object":"0x608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b612aef8061007e6000396000f3fe608060405234801561001057600080fd5b50600436106103785760003560e01c806386b6dbe5116101d3578063d7334c9d11610104578063f259a073116100a2578063f901dc331161007c578063f901dc3314610810578063fa2c59c814610823578063fadbcf4814610836578063fdedfa271461085957600080fd5b8063f259a0731461037d578063f26749f3146107ea578063f2fde38b146107fd57600080fd5b8063eb0de042116100de578063eb0de04214610783578063ebe2681614610770578063ee5462cc146107a6578063efb47bff146107b957600080fd5b8063d7334c9d1461075d578063e98539c514610770578063e9cd02e71461054357600080fd5b8063a67e1f5411610171578063be8c97b01161014b578063be8c97b014610706578063c537bed014610737578063ca963c5014610569578063d075f9bb1461074a57600080fd5b8063a67e1f54146106ae578063a847cf4d146106c1578063a9fc3d4f146106ef57600080fd5b8063957dc6c0116101ad578063957dc6c01461065257806398b3cc3914610665578063a1b6b43014610678578063a4c1cccb1461068b57600080fd5b806386b6dbe51461061b5780638c2fdf9e1461062e5780638da5cb5b1461064157600080fd5b806359b92be9116102ad5780636d9a14231161024b57806372e548a91161022557806372e548a9146105bd57806373252494146105d0578063761bcd9c146105f55780637ea446551461060857600080fd5b80636d9a14231461058f578063713ebf3b146105a2578063715018a6146105b557600080fd5b80635e62deee116102875780635e62deee1461054357806363cc17f2146105565780636ad11353146105695780636d5025f11461057c57600080fd5b806359b92be91461050a5780635ace1d921461051d5780635e4ccace1461053057600080fd5b80632dc32a611161031a5780633ea35551116102f45780633ea35551146104ae578063425f49d0146104c15780634b941268146104d45780634b956bd8146104f757600080fd5b80632dc32a611461044757806334ec8d7e146104785780633cf200251461048b57600080fd5b80631710a4f2116103565780631710a4f2146103dd5780631c123e77146103f05780631d49039c146104035780632d12d7881461043457600080fd5b806304a3ba251461037d57806307ac35621461039257806307ef00cf146103a5575b600080fd5b61039061038b366004612164565b610868565b005b6103906103a0366004612225565b6108d1565b6103c86103b33660046122a4565b60066020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6103906103eb366004612225565b610bf6565b6103906103fe366004612225565b610c56565b6103c86104113660046122a4565b6001600160a01b031660009081526007602052604090205460ff16151560011490565b610390610442366004612164565b610cd0565b6103c86104553660046122a4565b6001600160a01b031660009081526008602052604090205460ff16151560011490565b610390610486366004612164565b610d2c565b6103c86104993660046122a4565b60056020526000908152604090205460ff1681565b6103906104bc366004612164565b610d94565b6103906104cf366004612225565b610dbf565b6103c86104e23660046122a4565b60086020526000908152604090205460ff1681565b610390610505366004612225565b610de1565b610390610518366004612225565b610e6d565b61039061052b366004612164565b610eab565b61039061053e3660046122e5565b610f0a565b610390610551366004612225565b610fa0565b610390610564366004612164565b611005565b610390610577366004612225565b611064565b61039061058a366004612347565b611087565b61039061059d366004612164565b61149f565b6103c86105b0366004612378565b6114d5565b61039061150d565b6103906105cb366004612164565b611521565b6000546001600160a01b03165b6040516001600160a01b0390911681526020016103d4565b610390610603366004612225565b611580565b610390610616366004612225565b611620565b610390610629366004612164565b611641565b61039061063c366004612164565b6116a0565b6000546001600160a01b03166105dd565b610390610660366004612225565b6116fc565b610390610673366004612164565b61179a565b610390610686366004612225565b6117f9565b6103c86106993660046122a4565b60036020526000908152604090205460ff1681565b6103906106bc366004612164565b611941565b6103c86106cf366004612378565b600160209081526000928352604080842090915290825290205460ff1681565b6106f860025481565b6040519081526020016103d4565b6103c86107143660046122a4565b6001600160a01b031660009081526004602052604090205460ff16151560011490565b6103c86107453660046122a4565b61199d565b6103c86107583660046122a4565b6119c0565b61039061076b3660046122e5565b6119e3565b61039061077e366004612225565b611a56565b6103c86107913660046122a4565b60076020526000908152604090205460ff1681565b6103906107b4366004612164565b611aa2565b6103c86107c73660046122a4565b6001600160a01b031660009081526006602052604090205460ff16151560011490565b6103906107f8366004612347565b611b57565b61039061080b3660046122a4565b611bcc565b61039061081e366004612164565b611c45565b610390610831366004612164565b611ca1565b6103c86108443660046122a4565b60046020526000908152604090205460ff1681565b604051600181526020016103d4565b610870611d00565b6001600160a01b03831660009081526007602052604090819020805460ff19169055517fb71be9befd3ac90c1c9981d3b1161b3c2c6dcd741f13b34061aa251226a802df906108c4908590859085906123d6565b60405180910390a1505050565b6000818060200190518101906108e79190612490565b905060005b8151811015610bf157600082828151811061090957610909612540565b60200260200101519050600061092c6000600484611d5a9092919063ffffffff16565b61093590612556565b90506000610953600480855161094b91906125a3565b859190611d5a565b6040805180820190915260208082527f7472616e736665724552433230496e28616464726573732c75696e74323536299101529050631dac092b60e11b6001600160e01b03198316016109ae576109a981610e6d565b610be6565b60408051808201909152601b81527f7472616e736665724552433230416c6c496e2861646472657373290000000000602090910152635cf59cb760e11b6001600160e01b0319831601610a04576109a981611620565b60408051808201909152601881527f6465706f73697428616464726573732c6164647265737329000000000000000060209091015262d3ec1f60e31b6001600160e01b0319831601610a59576109a981610fa0565b60408051808201909152601981527f776974686472617728616464726573732c6164647265737329000000000000006020909101526306bf1c7b60e01b6001600160e01b0319831601610aaf576109a981610fa0565b610ad6604051806060016040528060278152602001612a5f60279139805160209091012090565b6001600160e01b031916826001600160e01b03191603610af9576109a981611064565b610b20604051806060016040528060288152602001612a3760289139805160209091012090565b6001600160e01b031916826001600160e01b03191603610b43576109a981611064565b60408051808201909152601e81527f666c61736853776170416c6c4f75742875696e743235362c627974657329000060209091015263d2b3d16560e01b6001600160e01b0319831601610b99576109a981610dbf565b60405162461bcd60e51b815260206004820152601960248201527f556e6b6e6f776e2066756e6374696f6e2073656c6563746f720000000000000060448201526064015b60405180910390fd5b5050506001016108ec565b505050565b600081806020019051810190610c0c91906125c1565b509050610c36816001600160a01b031660009081526006602052604090205460ff16151560011490565b610c525760405162461bcd60e51b8152600401610bdd906125ef565b5050565b6000805b610c6383611eb1565b5092509050610c718261199d565b610c8d5760405162461bcd60e51b8152600401610bdd90612626565b610c968161199d565b610cb25760405162461bcd60e51b8152600401610bdd90612626565b610cbb83611eed565b15610bf157610cc983611f27565b9250610c5a565b610cd8611d00565b6001600160a01b03831660009081526005602052604090819020805460ff19169055517f4e13b11ab98e672bd78295ef9cebe764dc617f95decf47d842c25b83abc0c724906108c4908590859085906123d6565b610d5e83610d57604051806060016040528060338152602001612a0460339139805160209091012090565b8484610f0a565b610d8983610d57604051806060016040528060348152602001612a8660349139805160209091012090565b610bf183838361179a565b610d8983610d5760405180608001604052806043815260200161299f60439139805160209091012090565b600081806020019051810190610dd59190612651565b915050610c52816117f9565b600081806020019051810190610df791906125c1565b509050610e21816001600160a01b031660009081526007602052604090205460ff16151560011490565b610c525760405162461bcd60e51b815260206004820152601e60248201527f417070726f7665206164647265737320646f6573206e6f74206d6174636800006044820152606401610bdd565b600081806020019051810190610e8391906125c1565b509050610e8f8161199d565b610c525760405162461bcd60e51b8152600401610bdd90612626565b610eb3611d00565b6001600160a01b03831660009081526006602052604090819020805460ff19166001179055517f3562181221a42a19ddd03a82dfe06acab1905ceb65cdaf7d86a1d9fec6643552906108c4908590859085906123d6565b610f12611d00565b6001600160a01b03841660009081526001602081815260408084206001600160e01b0319881685529091528220805460ff191690911790556002805491610f5883612697565b91905055507fef729aaa41b9fd994f9ff7c1960df214a84f722002e6cfbea31799cd0873a3ef84848484604051610f9294939291906126b0565b60405180910390a150505050565b60008082806020019051810190610fb791906126ef565b91509150610fc48261199d565b610fe05760405162461bcd60e51b8152600401610bdd90612626565b610fe9816119c0565b610bf15760405162461bcd60e51b8152600401610bdd906125ef565b61100d611d00565b6001600160a01b03831660009081526008602052604090819020805460ff19166001179055517f628a44970c0e450415e3ae74334ea44f3307b74dbf677a1371190242bf2f3589906108c4908590859085906123d6565b60008180602001905181019061107a9190612729565b92505050610c52816117f9565b6000546001600160a01b03858116911614611499576110c3846001600160a01b031660009081526004602052604090205460ff16151560011490565b6111045760405162461bcd60e51b815260206004820152601260248201527114d95b99195c881b9bdd08185b1b1bddd95960721b6044820152606401610bdd565b60006111136004828486612778565b61111c916127a2565b905036600061112e8460048188612778565b9150915061113c86846114d5565b6111805760405162461bcd60e51b815260206004820152601560248201527410d85b1b081cda5d19481b9bdd08185b1b1bddd959605a1b6044820152606401610bdd565b6111a760405180608001604052806043815260200161299f60439139805160209091012090565b6001600160e01b031916836001600160e01b031916036112055761120082828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061158092505050565b611495565b61122c604051806060016040528060338152602001612a0460339139805160209091012090565b6001600160e01b031916836001600160e01b031916036112855761120082828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a5692505050565b6040805180820190915260128152716d756c746963616c6c2862797465735b5d2960701b602090910152630a6d35e560e31b6001600160e01b03198416016113065761120082828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506108d192505050565b6040805180820190915260198152787472616e7366657228616464726573732c75696e743235362960381b6020909101526356fa634560e01b6001600160e01b031984160161138e5761120082828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610bf692505050565b604080518082019091526018815277617070726f766528616464726573732c75696e743235362960401b60209091015263f6a1584d60e01b6001600160e01b03198416016114155761120082828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610de192505050565b61143c6040518060600160405280602281526020016129e260229139805160209091012090565b6001600160e01b031916836001600160e01b03191603610b995761120082828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506116fc92505050565b5050505b50505050565b6114ca83610d576040518060600160405280602281526020016129e260229139805160209091012090565b610bf1838383611641565b6001600160a01b03821660009081526001602090815260408083206001600160e01b03198516845290915290205460ff165b92915050565b611515611d00565b61151f6000611f58565b565b611529611d00565b6001600160a01b03831660009081526005602052604090819020805460ff19166001179055517f62dd88c5ecfa60713a657640ebec4de26fc1aefa4afdb24e6d15a124fce72779906108c4908590859085906123d6565b6000808280602001905181019061159791906127d2565b509350935050506115a7816119c0565b6115c35760405162461bcd60e51b8152600401610bdd906125ef565b6000805b8351811015611619578381815181106115e2576115e2612540565b602002602001015191506115f58261199d565b6116115760405162461bcd60e51b8152600401610bdd90612626565b6001016115c7565b5050505050565b600081806020019051810190611636919061289b565b9050610e8f8161199d565b611649611d00565b6001600160a01b03831660009081526003602052604090819020805460ff19166001179055517fad90e2570fc4fe9f7437be3188d5c791c6662892d31731992aa88f5c87621983906108c4908590859085906123d6565b6116a8611d00565b6001600160a01b03831660009081526006602052604090819020805460ff19169055517f1212f8ddb39de8e1a339460c95752d61100723efeaa34ccd94bca94393f40938906108c4908590859085906123d6565b60008180602001905181019061171291906125c1565b50905061173c816001600160a01b031660009081526008602052604090205460ff16151560011490565b610c525760405162461bcd60e51b815260206004820152602960248201527f417070726f76652064656c65676174696f6e206164647265737320646f6573206044820152680dcdee840dac2e8c6d60bb1b6064820152608401610bdd565b6117a2611d00565b6001600160a01b03831660009081526007602052604090819020805460ff19166001179055517f628a44970c0e450415e3ae74334ea44f3307b74dbf677a1371190242bf2f3589906108c4908590859085906123d6565b6000805b611808836000611fa8565b915061183760018061181c600360146128b8565b61182691906128b8565b61183091906128b8565b8490611fa8565b90506118428261199d565b61185e5760405162461bcd60e51b8152600401610bdd90612626565b6118678161199d565b6118835760405162461bcd60e51b8152600401610bdd90612626565b600180611892600360146128b8565b61189c91906128b8565b6118a691906128b8565b60146001806118b66003846128b8565b6118c091906128b8565b6118ca91906128b8565b6118d491906128b8565b6118de91906128b8565b835110610bf15761193a6001806118f7600360146128b8565b61190191906128b8565b61190b91906128b8565b60018061191a600360146128b8565b61192491906128b8565b61192e91906128b8565b855161094b91906125a3565b92506117fd565b611949611d00565b6001600160a01b03831660009081526004602052604090819020805460ff19169055517f3097928509c53a2dab9500431201d82b0d756e8f890fd01f4ae6b33b45687ea4906108c4908590859085906123d6565b6001600160a01b031660009081526003602052604090205460ff16151560011490565b6001600160a01b031660009081526005602052604090205460ff16151560011490565b6119eb611d00565b6001600160a01b03841660009081526001602090815260408083206001600160e01b03198716845290915290819020805460ff19169055517f37ea10f2d08f5a9803dfcd5abf3cfc7b0d6fcdf5fcbc36be9ea5a0b53d9a4d9b90610f929086908690869086906126b0565b600081806020019051810190611a6c9190612962565b9050611a7b81602001516119c0565b611a975760405162461bcd60e51b8152600401610bdd906125ef565b8051610c5290610c56565b6040805180820190915260198152787472616e7366657228616464726573732c75696e743235362960381b602090910152611afd837fa9059cbb2ab09eb219583f4a59a5d0623ade346d962bcd4e46b11da047c9049b610d57565b604080518082019091526018815277617070726f766528616464726573732c75696e743235362960401b6020909101526114ca837f095ea7b334ae44009aa867bfb386f5c3b4b443ac6f0ee573fa91c4608fbadfba610d57565b6040805180820190915260128152716d756c746963616c6c2862797465735b5d2960701b602090910152611bab847fac9650d882acfa253cba1ed543b9ff47351da99c3bd00a89625e5cdb2099009c610d57565b611bb684838361179a565b611bc183838361179a565b611499848383611005565b611bd4611d00565b6001600160a01b038116611c395760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bdd565b611c4281611f58565b50565b611c4d611d00565b6001600160a01b03831660009081526003602052604090819020805460ff19169055517f9ca3f065622f5f03f32b7157677a0e420c3a36ab45fd49f256ffebce3e310587906108c4908590859085906123d6565b611ca9611d00565b6001600160a01b03831660009081526004602052604090819020805460ff19166001179055517fa8f9caaf4861720900294428e4ff34d37070c37afd26d96e6e4da75326d2c3ad906108c4908590859085906123d6565b6000546001600160a01b0316331461151f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610bdd565b606081611d6881601f6128b8565b1015611da75760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b6044820152606401610bdd565b82611db283826128b8565b1015611df15760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b6044820152606401610bdd565b611dfb82846128b8565b84511015611e3f5760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b6044820152606401610bdd565b606082158015611e5e5760405191506000825260208201604052611ea8565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015611e97578051835260209283019201611e7f565b5050858452601f01601f1916604052505b50949350505050565b60008080611ebf8482611fa8565b9250611ecc84601461205c565b9050611ee4611edd600360146128b8565b8590611fa8565b91509193909250565b6000611efb600360146128b8565b6014611f086003826128b8565b611f1291906128b8565b611f1c91906128b8565b825110159050919050565b6060611507611f38600360146128b8565b611f44600360146128b8565b8451611f5091906125a3565b849190611d5a565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600081611fb68160146128b8565b1015611ff95760405162461bcd60e51b8152602060048201526012602482015271746f416464726573735f6f766572666c6f7760701b6044820152606401610bdd565b6120048260146128b8565b8351101561204c5760405162461bcd60e51b8152602060048201526015602482015274746f416464726573735f6f75744f66426f756e647360581b6044820152606401610bdd565b500160200151600160601b900490565b60008161206a8160036128b8565b10156120ac5760405162461bcd60e51b8152602060048201526011602482015270746f55696e7432345f6f766572666c6f7760781b6044820152606401610bdd565b6120b78260036128b8565b835110156120fe5760405162461bcd60e51b8152602060048201526014602482015273746f55696e7432345f6f75744f66426f756e647360601b6044820152606401610bdd565b50016003015190565b6001600160a01b0381168114611c4257600080fd5b60008083601f84011261212e57600080fd5b5081356001600160401b0381111561214557600080fd5b60208301915083602082850101111561215d57600080fd5b9250929050565b60008060006040848603121561217957600080fd5b833561218481612107565b925060208401356001600160401b0381111561219f57600080fd5b6121ab8682870161211c565b9497909650939450505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156121f6576121f66121b8565b604052919050565b60006001600160401b03821115612217576122176121b8565b50601f01601f191660200190565b60006020828403121561223757600080fd5b81356001600160401b0381111561224d57600080fd5b8201601f8101841361225e57600080fd5b803561227161226c826121fe565b6121ce565b81815285602083850101111561228657600080fd5b81602084016020830137600091810160200191909152949350505050565b6000602082840312156122b657600080fd5b81356122c181612107565b9392505050565b80356001600160e01b0319811681146122e057600080fd5b919050565b600080600080606085870312156122fb57600080fd5b843561230681612107565b9350612314602086016122c8565b925060408501356001600160401b0381111561232f57600080fd5b61233b8782880161211c565b95989497509550505050565b6000806000806060858703121561235d57600080fd5b843561236881612107565b9350602085013561231481612107565b6000806040838503121561238b57600080fd5b823561239681612107565b91506123a4602084016122c8565b90509250929050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b03841681526040602082018190526000906123fb90830184866123ad565b95945050505050565b60006001600160401b0382111561241d5761241d6121b8565b5060051b60200190565b600082601f83011261243857600080fd5b815161244661226c826121fe565b818152602085602084870101111561245d57600080fd5b60005b8381101561247b578581018201518382018301528101612460565b50506000918101602001919091529392505050565b600060208083850312156124a357600080fd5b82516001600160401b03808211156124ba57600080fd5b818501915085601f8301126124ce57600080fd5b81516124dc61226c82612404565b81815260059190911b830184019084810190888311156124fb57600080fd5b8585015b83811015612533578051858111156125175760008081fd5b6125258b89838a0101612427565b8452509186019186016124ff565b5098975050505050505050565b634e487b7160e01b600052603260045260246000fd5b805160208201516001600160e01b031980821692919060048310156125855780818460040360031b1b83161693505b505050919050565b634e487b7160e01b600052601160045260246000fd5b818103818111156115075761150761258d565b80516122e081612107565b600080604083850312156125d457600080fd5b82516125df81612107565b6020939093015192949293505050565b6020808252601f908201527f5265636569766572206164647265737320646f6573206e6f74206d6174636800604082015260600190565b602080825260119082015270151bdad95b881b9bdd08185b1b1bddd959607a1b604082015260600190565b6000806040838503121561266457600080fd5b8251915060208301516001600160401b0381111561268157600080fd5b61268d85828601612427565b9150509250929050565b6000600182016126a9576126a961258d565b5060010190565b6001600160a01b03851681526001600160e01b0319841660208201526060604082018190526000906126e590830184866123ad565b9695505050505050565b6000806040838503121561270257600080fd5b825161270d81612107565b602084015190925061271e81612107565b809150509250929050565b60008060006060848603121561273e57600080fd5b835192506020840151915060408401516001600160401b0381111561276257600080fd5b61276e86828701612427565b9150509250925092565b6000808585111561278857600080fd5b8386111561279557600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156127ca5780818660040360031b1b83161692505b505092915050565b600080600080600060a086880312156127ea57600080fd5b85519450602080870151945060408701516001600160401b0381111561280f57600080fd5b8701601f8101891361282057600080fd5b805161282e61226c82612404565b81815260059190911b8201830190838101908b83111561284d57600080fd5b928401925b8284101561287457835161286581612107565b82529284019290840190612852565b8097505050505050612888606087016125b6565b9150608086015190509295509295909350565b6000602082840312156128ad57600080fd5b81516122c181612107565b808201808211156115075761150761258d565b600060a082840312156128dd57600080fd5b60405160a081016001600160401b038282108183111715612900576129006121b8565b81604052829350845191508082111561291857600080fd5b5061292585828601612427565b825250602083015161293681612107565b806020830152506040830151604082015260608301516060820152608083015160808201525092915050565b60006020828403121561297457600080fd5b81516001600160401b0381111561298a57600080fd5b612996848285016128cb565b94935050505056fe737761704578616374546f6b656e73466f72546f6b656e732875696e743235362c75696e743235362c616464726573735b5d2c616464726573732c75696e7432353629617070726f766544656c65676174696f6e28616464726573732c75696e74323536296578616374496e707574282862797465732c616464726573732c75696e743235362c75696e743235362c75696e743235362929666c6173685377617045786163744f75742875696e743235362c75696e743235362c627974657329666c617368537761704578616374496e2875696e743235362c75696e743235362c62797465732965786163744f7574707574282862797465732c616464726573732c75696e743235362c75696e743235362c75696e743235362929a264697066735822122071b77001ac4875888d25f967243da90848e0ed9ab6629eef3239476f5148045064736f6c63430008170033","sourceMap":"272:19430:3:-:0;;;3703:31;;;;;;;;;-1:-1:-1;936:32:0;734:10:2;936:18:0;:32::i;:::-;272:19430:3;;2426:187:0;2499:16;2518:6;;-1:-1:-1;;;;;2534:17:0;;;-1:-1:-1;;;;;;2534:17:0;;;;;;2566:40;;2518:6;;;;;;;2566:40;;2499:16;2566:40;2489:124;2426:187;:::o;272:19430:3:-;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405234801561001057600080fd5b50600436106103785760003560e01c806386b6dbe5116101d3578063d7334c9d11610104578063f259a073116100a2578063f901dc331161007c578063f901dc3314610810578063fa2c59c814610823578063fadbcf4814610836578063fdedfa271461085957600080fd5b8063f259a0731461037d578063f26749f3146107ea578063f2fde38b146107fd57600080fd5b8063eb0de042116100de578063eb0de04214610783578063ebe2681614610770578063ee5462cc146107a6578063efb47bff146107b957600080fd5b8063d7334c9d1461075d578063e98539c514610770578063e9cd02e71461054357600080fd5b8063a67e1f5411610171578063be8c97b01161014b578063be8c97b014610706578063c537bed014610737578063ca963c5014610569578063d075f9bb1461074a57600080fd5b8063a67e1f54146106ae578063a847cf4d146106c1578063a9fc3d4f146106ef57600080fd5b8063957dc6c0116101ad578063957dc6c01461065257806398b3cc3914610665578063a1b6b43014610678578063a4c1cccb1461068b57600080fd5b806386b6dbe51461061b5780638c2fdf9e1461062e5780638da5cb5b1461064157600080fd5b806359b92be9116102ad5780636d9a14231161024b57806372e548a91161022557806372e548a9146105bd57806373252494146105d0578063761bcd9c146105f55780637ea446551461060857600080fd5b80636d9a14231461058f578063713ebf3b146105a2578063715018a6146105b557600080fd5b80635e62deee116102875780635e62deee1461054357806363cc17f2146105565780636ad11353146105695780636d5025f11461057c57600080fd5b806359b92be91461050a5780635ace1d921461051d5780635e4ccace1461053057600080fd5b80632dc32a611161031a5780633ea35551116102f45780633ea35551146104ae578063425f49d0146104c15780634b941268146104d45780634b956bd8146104f757600080fd5b80632dc32a611461044757806334ec8d7e146104785780633cf200251461048b57600080fd5b80631710a4f2116103565780631710a4f2146103dd5780631c123e77146103f05780631d49039c146104035780632d12d7881461043457600080fd5b806304a3ba251461037d57806307ac35621461039257806307ef00cf146103a5575b600080fd5b61039061038b366004612164565b610868565b005b6103906103a0366004612225565b6108d1565b6103c86103b33660046122a4565b60066020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6103906103eb366004612225565b610bf6565b6103906103fe366004612225565b610c56565b6103c86104113660046122a4565b6001600160a01b031660009081526007602052604090205460ff16151560011490565b610390610442366004612164565b610cd0565b6103c86104553660046122a4565b6001600160a01b031660009081526008602052604090205460ff16151560011490565b610390610486366004612164565b610d2c565b6103c86104993660046122a4565b60056020526000908152604090205460ff1681565b6103906104bc366004612164565b610d94565b6103906104cf366004612225565b610dbf565b6103c86104e23660046122a4565b60086020526000908152604090205460ff1681565b610390610505366004612225565b610de1565b610390610518366004612225565b610e6d565b61039061052b366004612164565b610eab565b61039061053e3660046122e5565b610f0a565b610390610551366004612225565b610fa0565b610390610564366004612164565b611005565b610390610577366004612225565b611064565b61039061058a366004612347565b611087565b61039061059d366004612164565b61149f565b6103c86105b0366004612378565b6114d5565b61039061150d565b6103906105cb366004612164565b611521565b6000546001600160a01b03165b6040516001600160a01b0390911681526020016103d4565b610390610603366004612225565b611580565b610390610616366004612225565b611620565b610390610629366004612164565b611641565b61039061063c366004612164565b6116a0565b6000546001600160a01b03166105dd565b610390610660366004612225565b6116fc565b610390610673366004612164565b61179a565b610390610686366004612225565b6117f9565b6103c86106993660046122a4565b60036020526000908152604090205460ff1681565b6103906106bc366004612164565b611941565b6103c86106cf366004612378565b600160209081526000928352604080842090915290825290205460ff1681565b6106f860025481565b6040519081526020016103d4565b6103c86107143660046122a4565b6001600160a01b031660009081526004602052604090205460ff16151560011490565b6103c86107453660046122a4565b61199d565b6103c86107583660046122a4565b6119c0565b61039061076b3660046122e5565b6119e3565b61039061077e366004612225565b611a56565b6103c86107913660046122a4565b60076020526000908152604090205460ff1681565b6103906107b4366004612164565b611aa2565b6103c86107c73660046122a4565b6001600160a01b031660009081526006602052604090205460ff16151560011490565b6103906107f8366004612347565b611b57565b61039061080b3660046122a4565b611bcc565b61039061081e366004612164565b611c45565b610390610831366004612164565b611ca1565b6103c86108443660046122a4565b60046020526000908152604090205460ff1681565b604051600181526020016103d4565b610870611d00565b6001600160a01b03831660009081526007602052604090819020805460ff19169055517fb71be9befd3ac90c1c9981d3b1161b3c2c6dcd741f13b34061aa251226a802df906108c4908590859085906123d6565b60405180910390a1505050565b6000818060200190518101906108e79190612490565b905060005b8151811015610bf157600082828151811061090957610909612540565b60200260200101519050600061092c6000600484611d5a9092919063ffffffff16565b61093590612556565b90506000610953600480855161094b91906125a3565b859190611d5a565b6040805180820190915260208082527f7472616e736665724552433230496e28616464726573732c75696e74323536299101529050631dac092b60e11b6001600160e01b03198316016109ae576109a981610e6d565b610be6565b60408051808201909152601b81527f7472616e736665724552433230416c6c496e2861646472657373290000000000602090910152635cf59cb760e11b6001600160e01b0319831601610a04576109a981611620565b60408051808201909152601881527f6465706f73697428616464726573732c6164647265737329000000000000000060209091015262d3ec1f60e31b6001600160e01b0319831601610a59576109a981610fa0565b60408051808201909152601981527f776974686472617728616464726573732c6164647265737329000000000000006020909101526306bf1c7b60e01b6001600160e01b0319831601610aaf576109a981610fa0565b610ad6604051806060016040528060278152602001612a5f60279139805160209091012090565b6001600160e01b031916826001600160e01b03191603610af9576109a981611064565b610b20604051806060016040528060288152602001612a3760289139805160209091012090565b6001600160e01b031916826001600160e01b03191603610b43576109a981611064565b60408051808201909152601e81527f666c61736853776170416c6c4f75742875696e743235362c627974657329000060209091015263d2b3d16560e01b6001600160e01b0319831601610b99576109a981610dbf565b60405162461bcd60e51b815260206004820152601960248201527f556e6b6e6f776e2066756e6374696f6e2073656c6563746f720000000000000060448201526064015b60405180910390fd5b5050506001016108ec565b505050565b600081806020019051810190610c0c91906125c1565b509050610c36816001600160a01b031660009081526006602052604090205460ff16151560011490565b610c525760405162461bcd60e51b8152600401610bdd906125ef565b5050565b6000805b610c6383611eb1565b5092509050610c718261199d565b610c8d5760405162461bcd60e51b8152600401610bdd90612626565b610c968161199d565b610cb25760405162461bcd60e51b8152600401610bdd90612626565b610cbb83611eed565b15610bf157610cc983611f27565b9250610c5a565b610cd8611d00565b6001600160a01b03831660009081526005602052604090819020805460ff19169055517f4e13b11ab98e672bd78295ef9cebe764dc617f95decf47d842c25b83abc0c724906108c4908590859085906123d6565b610d5e83610d57604051806060016040528060338152602001612a0460339139805160209091012090565b8484610f0a565b610d8983610d57604051806060016040528060348152602001612a8660349139805160209091012090565b610bf183838361179a565b610d8983610d5760405180608001604052806043815260200161299f60439139805160209091012090565b600081806020019051810190610dd59190612651565b915050610c52816117f9565b600081806020019051810190610df791906125c1565b509050610e21816001600160a01b031660009081526007602052604090205460ff16151560011490565b610c525760405162461bcd60e51b815260206004820152601e60248201527f417070726f7665206164647265737320646f6573206e6f74206d6174636800006044820152606401610bdd565b600081806020019051810190610e8391906125c1565b509050610e8f8161199d565b610c525760405162461bcd60e51b8152600401610bdd90612626565b610eb3611d00565b6001600160a01b03831660009081526006602052604090819020805460ff19166001179055517f3562181221a42a19ddd03a82dfe06acab1905ceb65cdaf7d86a1d9fec6643552906108c4908590859085906123d6565b610f12611d00565b6001600160a01b03841660009081526001602081815260408084206001600160e01b0319881685529091528220805460ff191690911790556002805491610f5883612697565b91905055507fef729aaa41b9fd994f9ff7c1960df214a84f722002e6cfbea31799cd0873a3ef84848484604051610f9294939291906126b0565b60405180910390a150505050565b60008082806020019051810190610fb791906126ef565b91509150610fc48261199d565b610fe05760405162461bcd60e51b8152600401610bdd90612626565b610fe9816119c0565b610bf15760405162461bcd60e51b8152600401610bdd906125ef565b61100d611d00565b6001600160a01b03831660009081526008602052604090819020805460ff19166001179055517f628a44970c0e450415e3ae74334ea44f3307b74dbf677a1371190242bf2f3589906108c4908590859085906123d6565b60008180602001905181019061107a9190612729565b92505050610c52816117f9565b6000546001600160a01b03858116911614611499576110c3846001600160a01b031660009081526004602052604090205460ff16151560011490565b6111045760405162461bcd60e51b815260206004820152601260248201527114d95b99195c881b9bdd08185b1b1bddd95960721b6044820152606401610bdd565b60006111136004828486612778565b61111c916127a2565b905036600061112e8460048188612778565b9150915061113c86846114d5565b6111805760405162461bcd60e51b815260206004820152601560248201527410d85b1b081cda5d19481b9bdd08185b1b1bddd959605a1b6044820152606401610bdd565b6111a760405180608001604052806043815260200161299f60439139805160209091012090565b6001600160e01b031916836001600160e01b031916036112055761120082828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061158092505050565b611495565b61122c604051806060016040528060338152602001612a0460339139805160209091012090565b6001600160e01b031916836001600160e01b031916036112855761120082828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a5692505050565b6040805180820190915260128152716d756c746963616c6c2862797465735b5d2960701b602090910152630a6d35e560e31b6001600160e01b03198416016113065761120082828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506108d192505050565b6040805180820190915260198152787472616e7366657228616464726573732c75696e743235362960381b6020909101526356fa634560e01b6001600160e01b031984160161138e5761120082828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610bf692505050565b604080518082019091526018815277617070726f766528616464726573732c75696e743235362960401b60209091015263f6a1584d60e01b6001600160e01b03198416016114155761120082828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610de192505050565b61143c6040518060600160405280602281526020016129e260229139805160209091012090565b6001600160e01b031916836001600160e01b03191603610b995761120082828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506116fc92505050565b5050505b50505050565b6114ca83610d576040518060600160405280602281526020016129e260229139805160209091012090565b610bf1838383611641565b6001600160a01b03821660009081526001602090815260408083206001600160e01b03198516845290915290205460ff165b92915050565b611515611d00565b61151f6000611f58565b565b611529611d00565b6001600160a01b03831660009081526005602052604090819020805460ff19166001179055517f62dd88c5ecfa60713a657640ebec4de26fc1aefa4afdb24e6d15a124fce72779906108c4908590859085906123d6565b6000808280602001905181019061159791906127d2565b509350935050506115a7816119c0565b6115c35760405162461bcd60e51b8152600401610bdd906125ef565b6000805b8351811015611619578381815181106115e2576115e2612540565b602002602001015191506115f58261199d565b6116115760405162461bcd60e51b8152600401610bdd90612626565b6001016115c7565b5050505050565b600081806020019051810190611636919061289b565b9050610e8f8161199d565b611649611d00565b6001600160a01b03831660009081526003602052604090819020805460ff19166001179055517fad90e2570fc4fe9f7437be3188d5c791c6662892d31731992aa88f5c87621983906108c4908590859085906123d6565b6116a8611d00565b6001600160a01b03831660009081526006602052604090819020805460ff19169055517f1212f8ddb39de8e1a339460c95752d61100723efeaa34ccd94bca94393f40938906108c4908590859085906123d6565b60008180602001905181019061171291906125c1565b50905061173c816001600160a01b031660009081526008602052604090205460ff16151560011490565b610c525760405162461bcd60e51b815260206004820152602960248201527f417070726f76652064656c65676174696f6e206164647265737320646f6573206044820152680dcdee840dac2e8c6d60bb1b6064820152608401610bdd565b6117a2611d00565b6001600160a01b03831660009081526007602052604090819020805460ff19166001179055517f628a44970c0e450415e3ae74334ea44f3307b74dbf677a1371190242bf2f3589906108c4908590859085906123d6565b6000805b611808836000611fa8565b915061183760018061181c600360146128b8565b61182691906128b8565b61183091906128b8565b8490611fa8565b90506118428261199d565b61185e5760405162461bcd60e51b8152600401610bdd90612626565b6118678161199d565b6118835760405162461bcd60e51b8152600401610bdd90612626565b600180611892600360146128b8565b61189c91906128b8565b6118a691906128b8565b60146001806118b66003846128b8565b6118c091906128b8565b6118ca91906128b8565b6118d491906128b8565b6118de91906128b8565b835110610bf15761193a6001806118f7600360146128b8565b61190191906128b8565b61190b91906128b8565b60018061191a600360146128b8565b61192491906128b8565b61192e91906128b8565b855161094b91906125a3565b92506117fd565b611949611d00565b6001600160a01b03831660009081526004602052604090819020805460ff19169055517f3097928509c53a2dab9500431201d82b0d756e8f890fd01f4ae6b33b45687ea4906108c4908590859085906123d6565b6001600160a01b031660009081526003602052604090205460ff16151560011490565b6001600160a01b031660009081526005602052604090205460ff16151560011490565b6119eb611d00565b6001600160a01b03841660009081526001602090815260408083206001600160e01b03198716845290915290819020805460ff19169055517f37ea10f2d08f5a9803dfcd5abf3cfc7b0d6fcdf5fcbc36be9ea5a0b53d9a4d9b90610f929086908690869086906126b0565b600081806020019051810190611a6c9190612962565b9050611a7b81602001516119c0565b611a975760405162461bcd60e51b8152600401610bdd906125ef565b8051610c5290610c56565b6040805180820190915260198152787472616e7366657228616464726573732c75696e743235362960381b602090910152611afd837fa9059cbb2ab09eb219583f4a59a5d0623ade346d962bcd4e46b11da047c9049b610d57565b604080518082019091526018815277617070726f766528616464726573732c75696e743235362960401b6020909101526114ca837f095ea7b334ae44009aa867bfb386f5c3b4b443ac6f0ee573fa91c4608fbadfba610d57565b6040805180820190915260128152716d756c746963616c6c2862797465735b5d2960701b602090910152611bab847fac9650d882acfa253cba1ed543b9ff47351da99c3bd00a89625e5cdb2099009c610d57565b611bb684838361179a565b611bc183838361179a565b611499848383611005565b611bd4611d00565b6001600160a01b038116611c395760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bdd565b611c4281611f58565b50565b611c4d611d00565b6001600160a01b03831660009081526003602052604090819020805460ff19169055517f9ca3f065622f5f03f32b7157677a0e420c3a36ab45fd49f256ffebce3e310587906108c4908590859085906123d6565b611ca9611d00565b6001600160a01b03831660009081526004602052604090819020805460ff19166001179055517fa8f9caaf4861720900294428e4ff34d37070c37afd26d96e6e4da75326d2c3ad906108c4908590859085906123d6565b6000546001600160a01b0316331461151f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610bdd565b606081611d6881601f6128b8565b1015611da75760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b6044820152606401610bdd565b82611db283826128b8565b1015611df15760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b6044820152606401610bdd565b611dfb82846128b8565b84511015611e3f5760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b6044820152606401610bdd565b606082158015611e5e5760405191506000825260208201604052611ea8565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015611e97578051835260209283019201611e7f565b5050858452601f01601f1916604052505b50949350505050565b60008080611ebf8482611fa8565b9250611ecc84601461205c565b9050611ee4611edd600360146128b8565b8590611fa8565b91509193909250565b6000611efb600360146128b8565b6014611f086003826128b8565b611f1291906128b8565b611f1c91906128b8565b825110159050919050565b6060611507611f38600360146128b8565b611f44600360146128b8565b8451611f5091906125a3565b849190611d5a565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600081611fb68160146128b8565b1015611ff95760405162461bcd60e51b8152602060048201526012602482015271746f416464726573735f6f766572666c6f7760701b6044820152606401610bdd565b6120048260146128b8565b8351101561204c5760405162461bcd60e51b8152602060048201526015602482015274746f416464726573735f6f75744f66426f756e647360581b6044820152606401610bdd565b500160200151600160601b900490565b60008161206a8160036128b8565b10156120ac5760405162461bcd60e51b8152602060048201526011602482015270746f55696e7432345f6f766572666c6f7760781b6044820152606401610bdd565b6120b78260036128b8565b835110156120fe5760405162461bcd60e51b8152602060048201526014602482015273746f55696e7432345f6f75744f66426f756e647360601b6044820152606401610bdd565b50016003015190565b6001600160a01b0381168114611c4257600080fd5b60008083601f84011261212e57600080fd5b5081356001600160401b0381111561214557600080fd5b60208301915083602082850101111561215d57600080fd5b9250929050565b60008060006040848603121561217957600080fd5b833561218481612107565b925060208401356001600160401b0381111561219f57600080fd5b6121ab8682870161211c565b9497909650939450505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156121f6576121f66121b8565b604052919050565b60006001600160401b03821115612217576122176121b8565b50601f01601f191660200190565b60006020828403121561223757600080fd5b81356001600160401b0381111561224d57600080fd5b8201601f8101841361225e57600080fd5b803561227161226c826121fe565b6121ce565b81815285602083850101111561228657600080fd5b81602084016020830137600091810160200191909152949350505050565b6000602082840312156122b657600080fd5b81356122c181612107565b9392505050565b80356001600160e01b0319811681146122e057600080fd5b919050565b600080600080606085870312156122fb57600080fd5b843561230681612107565b9350612314602086016122c8565b925060408501356001600160401b0381111561232f57600080fd5b61233b8782880161211c565b95989497509550505050565b6000806000806060858703121561235d57600080fd5b843561236881612107565b9350602085013561231481612107565b6000806040838503121561238b57600080fd5b823561239681612107565b91506123a4602084016122c8565b90509250929050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b03841681526040602082018190526000906123fb90830184866123ad565b95945050505050565b60006001600160401b0382111561241d5761241d6121b8565b5060051b60200190565b600082601f83011261243857600080fd5b815161244661226c826121fe565b818152602085602084870101111561245d57600080fd5b60005b8381101561247b578581018201518382018301528101612460565b50506000918101602001919091529392505050565b600060208083850312156124a357600080fd5b82516001600160401b03808211156124ba57600080fd5b818501915085601f8301126124ce57600080fd5b81516124dc61226c82612404565b81815260059190911b830184019084810190888311156124fb57600080fd5b8585015b83811015612533578051858111156125175760008081fd5b6125258b89838a0101612427565b8452509186019186016124ff565b5098975050505050505050565b634e487b7160e01b600052603260045260246000fd5b805160208201516001600160e01b031980821692919060048310156125855780818460040360031b1b83161693505b505050919050565b634e487b7160e01b600052601160045260246000fd5b818103818111156115075761150761258d565b80516122e081612107565b600080604083850312156125d457600080fd5b82516125df81612107565b6020939093015192949293505050565b6020808252601f908201527f5265636569766572206164647265737320646f6573206e6f74206d6174636800604082015260600190565b602080825260119082015270151bdad95b881b9bdd08185b1b1bddd959607a1b604082015260600190565b6000806040838503121561266457600080fd5b8251915060208301516001600160401b0381111561268157600080fd5b61268d85828601612427565b9150509250929050565b6000600182016126a9576126a961258d565b5060010190565b6001600160a01b03851681526001600160e01b0319841660208201526060604082018190526000906126e590830184866123ad565b9695505050505050565b6000806040838503121561270257600080fd5b825161270d81612107565b602084015190925061271e81612107565b809150509250929050565b60008060006060848603121561273e57600080fd5b835192506020840151915060408401516001600160401b0381111561276257600080fd5b61276e86828701612427565b9150509250925092565b6000808585111561278857600080fd5b8386111561279557600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156127ca5780818660040360031b1b83161692505b505092915050565b600080600080600060a086880312156127ea57600080fd5b85519450602080870151945060408701516001600160401b0381111561280f57600080fd5b8701601f8101891361282057600080fd5b805161282e61226c82612404565b81815260059190911b8201830190838101908b83111561284d57600080fd5b928401925b8284101561287457835161286581612107565b82529284019290840190612852565b8097505050505050612888606087016125b6565b9150608086015190509295509295909350565b6000602082840312156128ad57600080fd5b81516122c181612107565b808201808211156115075761150761258d565b600060a082840312156128dd57600080fd5b60405160a081016001600160401b038282108183111715612900576129006121b8565b81604052829350845191508082111561291857600080fd5b5061292585828601612427565b825250602083015161293681612107565b806020830152506040830151604082015260608301516060820152608083015160808201525092915050565b60006020828403121561297457600080fd5b81516001600160401b0381111561298a57600080fd5b612996848285016128cb565b94935050505056fe737761704578616374546f6b656e73466f72546f6b656e732875696e743235362c75696e743235362c616464726573735b5d2c616464726573732c75696e7432353629617070726f766544656c65676174696f6e28616464726573732c75696e74323536296578616374496e707574282862797465732c616464726573732c75696e743235362c75696e743235362c75696e743235362929666c6173685377617045786163744f75742875696e743235362c75696e743235362c627974657329666c617368537761704578616374496e2875696e743235362c75696e743235362c62797465732965786163744f7574707574282862797465732c616464726573732c75696e743235362c75696e743235362c75696e743235362929a264697066735822122071b77001ac4875888d25f967243da90848e0ed9ab6629eef3239476f5148045064736f6c63430008170033","sourceMap":"272:19430:3:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6155:221;;;;;;:::i;:::-;;:::i;:::-;;13300:1642;;;;;;:::i;:::-;;:::i;2467:79::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2750:14:8;;2743:22;2725:41;;2713:2;2698:18;2467:79:3;;;;;;;;8342:219;;;;;;:::i;:::-;;:::i;12415:493::-;;;;;;:::i;:::-;;:::i;7882:152::-;;;;;;:::i;:::-;-1:-1:-1;;;;;7982:37:3;7959:4;7982:37;;;:27;:37;;;;;;;;:45;;:37;:45;;7882:152;5289:179;;;;;;:::i;:::-;;:::i;8040:172::-;;;;;;:::i;:::-;-1:-1:-1;;;;;8150:47:3;8127:4;8150:47;;;:37;:47;;;;;;;;:55;;:47;:55;;8040:172;12914:351;;;;;;:::i;:::-;;:::i;2373:65::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;11505:260;;;;;;:::i;:::-;;:::i;17678:183::-;;;;;;:::i;:::-;;:::i;2685:89::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;8567:217;;;;;;:::i;:::-;;:::i;15133:208::-;;;;;;:::i;:::-;;:::i;5474:221::-;;;;;;:::i;:::-;;:::i;4301:235::-;;;;;;:::i;:::-;;:::i;15927:305::-;;;;;;:::i;:::-;;:::i;6382:241::-;;;;;;:::i;:::-;;:::i;17291:196::-;;;;;;:::i;:::-;;:::i;9538:1459::-;;;;;;:::i;:::-;;:::i;9319:213::-;;;;;;:::i;:::-;;:::i;7257:145::-;;;;;;:::i;:::-;;:::i;1824:101:0:-;;;:::i;5104:179:3:-;;;;;;:::i;:::-;;:::i;3992:93::-;4045:7;1273:6:0;-1:-1:-1;;;;;1273:6:0;3992:93:3;;;-1:-1:-1;;;;;4757:32:8;;;4739:51;;4727:2;4712:18;3992:93:3;4593:203:8;11036:463:3;;;;;;:::i;:::-;;:::i;15532:200::-;;;;;;:::i;:::-;;:::i;6866:161::-;;;;;;:::i;:::-;;:::i;5701:221::-;;;;;;:::i;:::-;;:::i;1201:85:0:-;1247:7;1273:6;-1:-1:-1;;;;;1273:6:0;1201:85;;8790:248:3;;;;;;:::i;:::-;;:::i;5928:221::-;;;;;;:::i;:::-;;:::i;18402:689::-;;;;;;:::i;:::-;;:::i;2155:59::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;4931:167;;;;;;:::i;:::-;;:::i;1848:91::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;2060:25;;;;;;;;;4947::8;;;4935:2;4920:18;2060:25:3;4801:177:8;7408:122:3;;;;;;:::i;:::-;-1:-1:-1;;;;;7493:22:3;7470:4;7493:22;;;:14;:22;;;;;;;;:30;;:22;:30;;7408:122;8218:118;;;;;;:::i;:::-;;:::i;7588:130::-;;;;;;:::i;:::-;;:::i;4542:210::-;;;;;;:::i;:::-;;:::i;12108:301::-;;;;;;:::i;:::-;;:::i;2576:79::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;9044:269;;;;;;:::i;:::-;;:::i;7724:152::-;;;;;;:::i;:::-;-1:-1:-1;;;;;7824:37:3;7801:4;7824:37;;;:27;:37;;;;;;;;:45;;:37;:45;;7724:152;19097:603;;;;;;:::i;:::-;;:::i;2074:198:0:-;;;;;;:::i;:::-;;:::i;7033:161:3:-;;;;;;:::i;:::-;;:::i;4758:167::-;;;;;;:::i;:::-;;:::i;2263:61::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;4212:83;;;4287:1;5817:36:8;;5805:2;5790:18;4212:83:3;5675:184:8;6155:221:3;1094:13:0;:11;:13::i;:::-;-1:-1:-1;;;;;6268:40:3;::::1;;::::0;;;:27:::1;:40;::::0;;;;;;6261:47;;-1:-1:-1;;6261:47:3::1;::::0;;6323:46;::::1;::::0;::::1;::::0;6296:11;;6363:5;;;;6323:46:::1;:::i;:::-;;;;;;;;6155:221:::0;;;:::o;13300:1642::-;13380:22;13417:8;13406:31;;;;;;;;;;;;:::i;:::-;13379:58;;13504:6;13499:1437;13516:7;:14;13512:1;:18;13499:1437;;;13551:33;13587:7;13595:1;13587:10;;;;;;;;:::i;:::-;;;;;;;13551:46;;13672:15;13697:32;13724:1;13727;13697:20;:26;;:32;;;;;:::i;:::-;13690:40;;;:::i;:::-;13672:58;;13744:24;13771:62;13798:1;13831;13801:20;:27;:31;;;;:::i;:::-;13771:20;;:62;:26;:62::i;:::-;13902:47;;;;;;;;;;;;;;;;;13744:89;-1:-1:-1;;;;;;;;;;13890:59:3;;;13886:1040;;13969:37;13994:11;13969:24;:37::i;:::-;13886:1040;;;14043:42;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;14031:54:3;;;14027:899;;14105:40;14133:11;14105:27;:40::i;14027:899::-;14182:39;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;14170:51:3;;;14166:760;;14241:29;14258:11;14241:16;:29::i;14166:760::-;14307:40;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;14295:52:3;;;14291:635;;14367:30;14385:11;14367:17;:30::i;14291:635::-;14434:54;;;;;;;;;;;;;;;;;;3899:23;;;;;;;;3740:190;14434:54;-1:-1:-1;;;;;14422:66:3;;:8;-1:-1:-1;;;;;14422:66:3;;;14418:508;;14508:39;14535:11;14508:26;:39::i;14418:508::-;14584:55;;;;;;;;;;;;;;;;;;3899:23;;;;;;;;3740:190;14584:55;-1:-1:-1;;;;;14572:67:3;;:8;-1:-1:-1;;;;;14572:67:3;;;14568:358;;14659:39;14686:11;14659:26;:39::i;14568:358::-;14735:45;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;14723:57:3;;;14719:207;;14800:37;14825:11;14800:24;:37::i;14719:207::-;14876:35;;-1:-1:-1;;;14876:35:3;;9363:2:8;14876:35:3;;;9345:21:8;9402:2;9382:18;;;9375:30;9441:27;9421:18;;;9414:55;9486:18;;14876:35:3;;;;;;;;14719:207;-1:-1:-1;;;13532:3:3;;13499:1437;;;;13369:1573;13300:1642;:::o;8342:219::-;8415:10;8442:8;8431:37;;;;;;;;;;;;:::i;:::-;8414:54;;;8486:32;8515:2;-1:-1:-1;;;;;7824:37:3;7801:4;7824:37;;;:27;:37;;;;;;;;:45;;:37;:45;;7724:152;8486:32;8478:76;;;;-1:-1:-1;;;8478:76:3;;;;;;;:::i;:::-;8404:157;8342:219;:::o;12415:493::-;12487:15;12512:16;12539:363;12590:22;:4;:20;:22::i;:::-;-1:-1:-1;12566:46:3;-1:-1:-1;12566:46:3;-1:-1:-1;12635:23:3;12566:46;12635:14;:23::i;:::-;12627:53;;;;-1:-1:-1;;;12627:53:3;;;;;;;:::i;:::-;12702:24;12717:8;12702:14;:24::i;:::-;12694:54;;;;-1:-1:-1;;;12694:54:3;;;;;;;:::i;:::-;12767:23;:4;:21;:23::i;:::-;12763:129;;;12817:16;:4;:14;:16::i;:::-;12810:23;;12539:363;;5289:179;1094:13:0;:11;:13::i;:::-;-1:-1:-1;;;;;5388:26:3;::::1;;::::0;;;:16:::1;:26;::::0;;;;;;5381:33;;-1:-1:-1;;5381:33:3::1;::::0;;5429:32;::::1;::::0;::::1;::::0;5405:8;;5455:5;;;;5429:32:::1;:::i;12914:351::-:0;13006:96;13020:6;13028:66;;;;;;;;;;;;;;;;;;3899:23;;;;;;;;3740:190;13028:66;13096:5;;13006:13;:96::i;:::-;13112:97;13126:6;13134:67;;;;;;;;;;;;;;;;;;3899:23;;;;;;;;3740:190;13112:97;13219:39;13244:6;13252:5;;13219:24;:39::i;11505:260::-;11597:112;11611:6;11619:82;;;;;;;;;;;;;;;;;;3899:23;;;;;;;;3740:190;17678:183;17760:17;17792:8;17781:38;;;;;;;;;;;;:::i;:::-;17757:62;;;17830:24;17849:4;17830:18;:24::i;8567:217::-;8639:10;8666:8;8655:37;;;;;;;;;;;;:::i;:::-;8638:54;;;8710:32;8739:2;-1:-1:-1;;;;;7982:37:3;7959:4;7982:37;;;:27;:37;;;;;;;;:45;;:37;:45;;7882:152;8710:32;8702:75;;;;-1:-1:-1;;;8702:75:3;;11300:2:8;8702:75:3;;;11282:21:8;11339:2;11319:18;;;11312:30;11378:32;11358:18;;;11351:60;11428:18;;8702:75:3;11098:354:8;15133:208:3;15213:13;15243:8;15232:40;;;;;;;;;;;;:::i;:::-;15212:60;;;15291:21;15306:5;15291:14;:21::i;:::-;15283:51;;;;-1:-1:-1;;;15283:51:3;;;;;;;:::i;5474:221::-;1094:13:0;:11;:13::i;:::-;-1:-1:-1;;;;;5579:40:3;::::1;;::::0;;;:27:::1;:40;::::0;;;;;;:47;;-1:-1:-1;;5579:47:3::1;5622:4;5579:47;::::0;;5641;::::1;::::0;::::1;::::0;5607:11;;5682:5;;;;5641:47:::1;:::i;4301:235::-:0;1094:13:0;:11;:13::i;:::-;-1:-1:-1;;;;;4407:24:3;::::1;;::::0;;;4444:4:::1;4407:24;::::0;;;;;;;-1:-1:-1;;;;;;4407:34:3;::::1;::::0;;;;;;;:41;;-1:-1:-1;;4407:41:3::1;::::0;;::::1;::::0;;4458:13:::1;:15:::0;;;::::1;::::0;::::1;:::i;:::-;;;;;;4488:41;4505:6;4513:8;4523:5;;4488:41;;;;;;;;;:::i;:::-;;;;;;;;4301:235:::0;;;;:::o;15927:305::-;15999:13;16014:16;16045:8;16034:40;;;;;;;;;;;;:::i;:::-;15998:76;;;;16101:21;16116:5;16101:14;:21::i;:::-;16093:51;;;;-1:-1:-1;;;16093:51:3;;;;;;;:::i;:::-;16162:27;16180:8;16162:17;:27::i;:::-;16154:71;;;;-1:-1:-1;;;16154:71:3;;;;;;;:::i;6382:241::-;1094:13:0;:11;:13::i;:::-;-1:-1:-1;;;;;6497:50:3;::::1;;::::0;;;:37:::1;:50;::::0;;;;;;:57;;-1:-1:-1;;6497:57:3::1;6550:4;6497:57;::::0;;6569:47;::::1;::::0;::::1;::::0;6535:11;;6610:5;;;;6569:47:::1;:::i;17291:196::-:0;17377:17;17409:8;17398:47;;;;;;;;;;;;:::i;:::-;17372:73;;;;17456:24;17475:4;17456:18;:24::i;9538:1459::-;4045:7;1273:6:0;-1:-1:-1;;;;;9687:32:3;;;1273:6:0;;9684:125:3;9792:7;9684:125;9827:23;9843:6;-1:-1:-1;;;;;7493:22:3;7470:4;7493:22;;;:14;:22;;;;;;;;:30;;:22;:30;;7408:122;9827:23;9819:54;;;;-1:-1:-1;;;9819:54:3;;13112:2:8;9819:54:3;;;13094:21:8;13151:2;13131:18;;;13124:30;-1:-1:-1;;;13170:18:8;;;13163:48;13228:18;;9819:54:3;12910:342:8;9819:54:3;9939:15;9964:24;9986:1;9939:15;9964:20;;:24;:::i;:::-;9957:32;;;:::i;:::-;9939:50;-1:-1:-1;9999:23:3;;10025:24;:20;10046:1;10025:20;;:24;:::i;:::-;9999:50;;;;10067:35;10085:6;10093:8;10067:17;:35::i;:::-;10059:69;;;;-1:-1:-1;;;10059:69:3;;14123:2:8;10059:69:3;;;14105:21:8;14162:2;14142:18;;;14135:30;-1:-1:-1;;;14181:18:8;;;14174:51;14242:18;;10059:69:3;13921:345:8;10059:69:3;10154:82;;;;;;;;;;;;;;;;;;3899:23;;;;;;;;3740:190;10154:82;-1:-1:-1;;;;;10142:94:3;;:8;-1:-1:-1;;;;;10142:94:3;;;10139:852;;10252:43;10286:8;;10252:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10252:33:3;;-1:-1:-1;;;10252:43:3:i;:::-;10139:852;;;10327:66;;;;;;;;;;;;;;;;;;3899:23;;;;;;;;3740:190;10327:66;-1:-1:-1;;;;;10315:78:3;;:8;-1:-1:-1;;;;;10315:78:3;;;10312:679;;10409:29;10429:8;;10409:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10409:19:3;;-1:-1:-1;;;10409:29:3:i;10312:679::-;10470:33;;;;;;;;;;;;-1:-1:-1;;;10470:33:3;;;;;-1:-1:-1;;;;;;;;;10458:45:3;;;10455:536;;10519:34;10544:8;;10519:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10519:24:3;;-1:-1:-1;;;10519:34:3:i;10455:536::-;10585:40;;;;;;;;;;;;-1:-1:-1;;;10585:40:3;;;;;-1:-1:-1;;;;;;;;;10573:52:3;;;10570:421;;10641:27;10659:8;;10641:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10641:17:3;;-1:-1:-1;;;10641:27:3:i;10570:421::-;10700:39;;;;;;;;;;;;-1:-1:-1;;;10700:39:3;;;;;-1:-1:-1;;;;;;;;;10688:51:3;;;10685:306;;10755:26;10772:8;;10755:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10755:16:3;;-1:-1:-1;;;10755:26:3:i;10685:306::-;10813:49;;;;;;;;;;;;;;;;;;3899:23;;;;;;;;3740:190;10813:49;-1:-1:-1;;;;;10801:61:3;;:8;-1:-1:-1;;;;;10801:61:3;;;10798:193;;10878:36;10905:8;;10878:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10878:26:3;;-1:-1:-1;;;10878:36:3:i;10798:193::-;9673:1324;;;9538:1459;;;;;:::o;9319:213::-;9413:78;9427:5;9434:49;;;;;;;;;;;;;;;;;;3899:23;;;;;;;;3740:190;9413:78;9501:24;9512:5;9519;;9501:10;:24::i;7257:145::-;-1:-1:-1;;;;;7361:24:3;;7338:4;7361:24;;;:16;:24;;;;;;;;-1:-1:-1;;;;;;7361:34:3;;;;;;;;;;;;7257:145;;;;;:::o;1824:101:0:-;1094:13;:11;:13::i;:::-;1888:30:::1;1915:1;1888:18;:30::i;:::-;1824:101::o:0;5104:179:3:-;1094:13:0;:11;:13::i;:::-;-1:-1:-1;;;;;5195:26:3;::::1;;::::0;;;:16:::1;:26;::::0;;;;;;:33;;-1:-1:-1;;5195:33:3::1;5224:4;5195:33;::::0;;5243;::::1;::::0;::::1;::::0;5212:8;;5270:5;;;;5243:33:::1;:::i;11036:463::-:0;11129:21;11152:10;11179:8;11168:60;;;;;;;;;;;;:::i;:::-;11124:104;;;;;;;11247:21;11265:2;11247:17;:21::i;:::-;11239:65;;;;-1:-1:-1;;;11239:65:3;;;;;;;:::i;:::-;11315:13;;11338:147;11362:4;:11;11358:1;:15;11338:147;;;11402:4;11407:1;11402:7;;;;;;;;:::i;:::-;;;;;;;11394:15;;11431:21;11446:5;11431:14;:21::i;:::-;11423:51;;;;-1:-1:-1;;;11423:51:3;;;;;;;:::i;:::-;11375:3;;11338:147;;;;11114:385;;;11036:463;:::o;15532:200::-;15615:13;15643:8;15632:31;;;;;;;;;;;;:::i;:::-;15614:49;;15682:21;15697:5;15682:14;:21::i;6866:161::-;1094:13:0;:11;:13::i;:::-;-1:-1:-1;;;;;6951:20:3;::::1;;::::0;;;:13:::1;:20;::::0;;;;;;:27;;-1:-1:-1;;6951:27:3::1;6974:4;6951:27;::::0;;6993;::::1;::::0;::::1;::::0;6965:5;;7014;;;;6993:27:::1;:::i;5701:221::-:0;1094:13:0;:11;:13::i;:::-;-1:-1:-1;;;;;5814:40:3;::::1;;::::0;;;:27:::1;:40;::::0;;;;;;5807:47;;-1:-1:-1;;5807:47:3::1;::::0;;5869:46;::::1;::::0;::::1;::::0;5842:11;;5909:5;;;;5869:46:::1;:::i;8790:248::-:0;8872:10;8899:8;8888:37;;;;;;;;;;;;:::i;:::-;8871:54;;;8943:42;8982:2;-1:-1:-1;;;;;8150:47:3;8127:4;8150:47;;;:37;:47;;;;;;;;:55;;:47;:55;;8040:172;8943:42;8935:96;;;;-1:-1:-1;;;8935:96:3;;15982:2:8;8935:96:3;;;15964:21:8;16021:2;16001:18;;;15994:30;16060:34;16040:18;;;16033:62;-1:-1:-1;;;16111:18:8;;;16104:39;16160:19;;8935:96:3;15780:405:8;5928:221:3;1094:13:0;:11;:13::i;:::-;-1:-1:-1;;;;;6033:40:3;::::1;;::::0;;;:27:::1;:40;::::0;;;;;;:47;;-1:-1:-1;;6033:47:3::1;6076:4;6033:47;::::0;;6095;::::1;::::0;::::1;::::0;6061:11;;6136:5;;;;6095:47:::1;:::i;18402:689::-:0;18471:15;18496:16;18523:562;18560:17;:4;18575:1;18560:14;:17::i;:::-;18550:27;-1:-1:-1;18602:36:3;952:1;;1078:29;741:1;634:2;1078:29;:::i;:::-;:49;;;;:::i;:::-;:72;;;;:::i;:::-;18602:4;;:14;:36::i;:::-;18591:47;;18661:23;18676:7;18661:14;:23::i;:::-;18653:53;;;;-1:-1:-1;;;18653:53:3;;;;;;;:::i;:::-;18728:24;18743:8;18728:14;:24::i;:::-;18720:54;;;;-1:-1:-1;;;18720:54:3;;;;;;;:::i;:::-;952:1;;1078:29;741:1;634:2;1078:29;:::i;:::-;:49;;;;:::i;:::-;:72;;;;:::i;:::-;634:2;952:1;;1078:29;741:1;634:2;1078:29;:::i;:::-;:49;;;;:::i;:::-;:72;;;;:::i;:::-;1250:32;;;;:::i;:::-;1427:42;;;;:::i;:::-;18872:4;:11;:49;18868:207;;18948:68;952:1;;1078:29;741:1;634:2;1078:29;:::i;:::-;:49;;;;:::i;:::-;:72;;;;:::i;:::-;952:1;;1078:29;741:1;634:2;1078:29;:::i;:::-;:49;;;;:::i;:::-;:72;;;;:::i;:::-;18981:4;:11;:34;;;;:::i;18948:68::-;18941:75;;18523:562;;4931:167;1094:13:0;:11;:13::i;:::-;-1:-1:-1;;;;;5026:22:3;::::1;;::::0;;;:14:::1;:22;::::0;;;;;;5019:29;;-1:-1:-1;;5019:29:3::1;::::0;;5063:28;::::1;::::0;::::1;::::0;5041:6;;5085:5;;;;5063:28:::1;:::i;8218:118::-:0;-1:-1:-1;;;;;8301:20:3;8278:4;8301:20;;;:13;:20;;;;;;;;:28;;:20;:28;;8218:118::o;7588:130::-;-1:-1:-1;;;;;7677:26:3;7654:4;7677:26;;;:16;:26;;;;;;;;:34;;:26;:34;;7588:130::o;4542:210::-;1094:13:0;:11;:13::i;:::-;-1:-1:-1;;;;;4656:24:3;::::1;;::::0;;;:16:::1;:24;::::0;;;;;;;-1:-1:-1;;;;;;4656:34:3;::::1;::::0;;;;;;;;;4649:41;;-1:-1:-1;;4649:41:3::1;::::0;;4705:40;::::1;::::0;::::1;::::0;4673:6;;4681:8;;4739:5;;;;4705:40:::1;:::i;12108:301::-:0;12184:31;12230:8;12219:41;;;;;;;;;;;;:::i;:::-;12183:77;;12287:35;12305:6;:16;;;12287:17;:35::i;:::-;12279:79;;;;-1:-1:-1;;;12279:79:3;;;;;;;:::i;:::-;12390:11;;12368:34;;:21;:34::i;9044:269::-;9146:40;;;;;;;;;;;;-1:-1:-1;;;9146:40:3;;;;;9125:69;9139:5;3899:23;9146:40;3740:190;9125:69;9225:39;;;;;;;;;;;;-1:-1:-1;;;9225:39:3;;;;;9204:68;9218:5;3899:23;9225:39;3740:190;19097:603;19235:33;;;;;;;;;;;;-1:-1:-1;;;19235:33:3;;;;;19208:68;19222:11;3899:23;19235:33;3740:190;19208:68;19286:44;19311:11;19324:5;;19286:24;:44::i;:::-;19340;19365:11;19378:5;;19340:24;:44::i;:::-;19639:54;19674:11;19687:5;;19639:34;:54::i;2074:198:0:-;1094:13;:11;:13::i;:::-;-1:-1:-1;;;;;2162:22:0;::::1;2154:73;;;::::0;-1:-1:-1;;;2154:73:0;;18168:2:8;2154:73:0::1;::::0;::::1;18150:21:8::0;18207:2;18187:18;;;18180:30;18246:34;18226:18;;;18219:62;-1:-1:-1;;;18297:18:8;;;18290:36;18343:19;;2154:73:0::1;17966:402:8::0;2154:73:0::1;2237:28;2256:8;2237:18;:28::i;:::-;2074:198:::0;:::o;7033:161:3:-;1094:13:0;:11;:13::i;:::-;-1:-1:-1;;;;;7126:20:3;::::1;;::::0;;;:13:::1;:20;::::0;;;;;;7119:27;;-1:-1:-1;;7119:27:3::1;::::0;;7161:26;::::1;::::0;::::1;::::0;7140:5;;7181;;;;7161:26:::1;:::i;4758:167::-:0;1094:13:0;:11;:13::i;:::-;-1:-1:-1;;;;;4845:22:3;::::1;;::::0;;;:14:::1;:22;::::0;;;;;;:29;;-1:-1:-1;;4845:29:3::1;4870:4;4845:29;::::0;;4889;::::1;::::0;::::1;::::0;4860:6;;4912:5;;;;4889:29:::1;:::i;1359:130:0:-:0;1247:7;1273:6;-1:-1:-1;;;;;1273:6:0;734:10:2;1422:23:0;1414:68;;;;-1:-1:-1;;;1414:68:0;;18575:2:8;1414:68:0;;;18557:21:8;;;18594:18;;;18587:30;18653:34;18633:18;;;18626:62;18705:18;;1414:68:0;18373:356:8;392:3007:6;514:12;562:7;546:12;562:7;556:2;546:12;:::i;:::-;:23;;538:50;;;;-1:-1:-1;;;538:50:6;;18936:2:8;538:50:6;;;18918:21:8;18975:2;18955:18;;;18948:30;-1:-1:-1;;;18994:18:8;;;18987:44;19048:18;;538:50:6;18734:338:8;538:50:6;626:6;606:16;615:7;626:6;606:16;:::i;:::-;:26;;598:53;;;;-1:-1:-1;;;598:53:6;;18936:2:8;598:53:6;;;18918:21:8;18975:2;18955:18;;;18948:30;-1:-1:-1;;;18994:18:8;;;18987:44;19048:18;;598:53:6;18734:338:8;598:53:6;686:16;695:7;686:6;:16;:::i;:::-;669:6;:13;:33;;661:63;;;;-1:-1:-1;;;661:63:6;;19279:2:8;661:63:6;;;19261:21:8;19318:2;19298:18;;;19291:30;-1:-1:-1;;;19337:18:8;;;19330:47;19394:18;;661:63:6;19077:341:8;661:63:6;735:22;798:15;;830:2099;;;;3082:4;3076:11;3063:24;;3280:1;3269:9;3262:20;3332:4;3321:9;3317:20;3311:4;3304:34;791:2565;;830:2099;1024:4;1018:11;1005:24;;1719:2;1710:7;1706:16;2121:9;2114:17;2108:4;2104:28;2092:9;2081;2077:25;2073:60;2173:7;2169:2;2165:16;2441:6;2427:9;2420:17;2414:4;2410:28;2398:9;2390:6;2386:22;2382:57;2378:70;2203:461;2478:3;2474:2;2471:11;2203:461;;;2632:9;;2621:21;;2523:4;2515:13;;;;2559;2203:461;;;-1:-1:-1;;2686:26:6;;;2906:2;2889:11;-1:-1:-1;;2885:25:6;2879:4;2872:39;-1:-1:-1;791:2565:6;-1:-1:-1;3383:9:6;392:3007;-1:-1:-1;;;;392:3007:6:o;1779:314:7:-;1883:14;;;1983:17;:4;1883:14;1983;:17::i;:::-;1974:26;-1:-1:-1;2016:24:7;:4;304:2;2016:13;:24::i;:::-;2010:30;-1:-1:-1;2059:27:7;507:20;397:1;304:2;507:20;:::i;:::-;2059:4;;:14;:27::i;:::-;2050:36;;1779:314;;;;;:::o;992:138::-;1060:4;507:20;397:1;304:2;507:20;:::i;:::-;304:2;507:20;397:1;304:2;507:20;:::i;:::-;618:23;;;;:::i;:::-;777:24;;;;:::i;:::-;1083:4;:11;:40;;1076:47;;992:138;;;:::o;2635:149::-;2696:12;2727:50;507:20;397:1;304:2;507:20;:::i;:::-;;397:1;304:2;507:20;:::i;:::-;2751:4;:11;:25;;;;:::i;:::-;2727:4;;:50;:10;:50::i;2426:187:0:-;2499:16;2518:6;;-1:-1:-1;;;;;2534:17:0;;;-1:-1:-1;;;;;;2534:17:0;;;;;;2566:40;;2518:6;;;;;;;2566:40;;2499:16;2566:40;2489:124;2426:187;:::o;3405:416:6:-;3484:7;3526:6;3511:11;3526:6;3520:2;3511:11;:::i;:::-;:21;;3503:52;;;;-1:-1:-1;;;3503:52:6;;19625:2:8;3503:52:6;;;19607:21:8;19664:2;19644:18;;;19637:30;-1:-1:-1;;;19683:18:8;;;19676:48;19741:18;;3503:52:6;19423:342:8;3503:52:6;3590:11;:6;3599:2;3590:11;:::i;:::-;3573:6;:13;:28;;3565:62;;;;-1:-1:-1;;;3565:62:6;;19972:2:8;3565:62:6;;;19954:21:8;20011:2;19991:18;;;19984:30;-1:-1:-1;;;20030:18:8;;;20023:51;20091:18;;3565:62:6;19770:345:8;3565:62:6;-1:-1:-1;3715:30:6;3731:4;3715:30;3709:37;-1:-1:-1;;;3705:71:6;;;3405:416::o;3827:365::-;3905:6;3945;3931:10;3945:6;3940:1;3931:10;:::i;:::-;:20;;3923:50;;;;-1:-1:-1;;;3923:50:6;;20322:2:8;3923:50:6;;;20304:21:8;20361:2;20341:18;;;20334:30;-1:-1:-1;;;20380:18:8;;;20373:47;20437:18;;3923:50:6;20120:341:8;3923:50:6;4008:10;:6;4017:1;4008:10;:::i;:::-;3991:6;:13;:27;;3983:60;;;;-1:-1:-1;;;3983:60:6;;20668:2:8;3983:60:6;;;20650:21:8;20707:2;20687:18;;;20680:30;-1:-1:-1;;;20726:18:8;;;20719:50;20786:18;;3983:60:6;20466:344:8;3983:60:6;-1:-1:-1;4120:29:6;4136:3;4120:29;4114:36;;3827:365::o;14:131:8:-;-1:-1:-1;;;;;89:31:8;;79:42;;69:70;;135:1;132;125:12;150:348;202:8;212:6;266:3;259:4;251:6;247:17;243:27;233:55;;284:1;281;274:12;233:55;-1:-1:-1;307:20:8;;-1:-1:-1;;;;;339:30:8;;336:50;;;382:1;379;372:12;336:50;419:4;411:6;407:17;395:29;;471:3;464:4;455:6;447;443:19;439:30;436:39;433:59;;;488:1;485;478:12;433:59;150:348;;;;;:::o;503:546::-;583:6;591;599;652:2;640:9;631:7;627:23;623:32;620:52;;;668:1;665;658:12;620:52;707:9;694:23;726:31;751:5;726:31;:::i;:::-;776:5;-1:-1:-1;832:2:8;817:18;;804:32;-1:-1:-1;;;;;848:30:8;;845:50;;;891:1;888;881:12;845:50;930:59;981:7;972:6;961:9;957:22;930:59;:::i;:::-;503:546;;1008:8;;-1:-1:-1;904:85:8;;-1:-1:-1;;;;503:546:8:o;1054:127::-;1115:10;1110:3;1106:20;1103:1;1096:31;1146:4;1143:1;1136:15;1170:4;1167:1;1160:15;1186:275;1257:2;1251:9;1322:2;1303:13;;-1:-1:-1;;1299:27:8;1287:40;;-1:-1:-1;;;;;1342:34:8;;1378:22;;;1339:62;1336:88;;;1404:18;;:::i;:::-;1440:2;1433:22;1186:275;;-1:-1:-1;1186:275:8:o;1466:186::-;1514:4;-1:-1:-1;;;;;1539:6:8;1536:30;1533:56;;;1569:18;;:::i;:::-;-1:-1:-1;1635:2:8;1614:15;-1:-1:-1;;1610:29:8;1641:4;1606:40;;1466:186::o;1657:671::-;1725:6;1778:2;1766:9;1757:7;1753:23;1749:32;1746:52;;;1794:1;1791;1784:12;1746:52;1834:9;1821:23;-1:-1:-1;;;;;1859:6:8;1856:30;1853:50;;;1899:1;1896;1889:12;1853:50;1922:22;;1975:4;1967:13;;1963:27;-1:-1:-1;1953:55:8;;2004:1;2001;1994:12;1953:55;2040:2;2027:16;2065:48;2081:31;2109:2;2081:31;:::i;:::-;2065:48;:::i;:::-;2136:2;2129:5;2122:17;2176:7;2171:2;2166;2162;2158:11;2154:20;2151:33;2148:53;;;2197:1;2194;2187:12;2148:53;2252:2;2247;2243;2239:11;2234:2;2227:5;2223:14;2210:45;2296:1;2275:14;;;2291:2;2271:23;2264:34;;;;2279:5;1657:671;-1:-1:-1;;;;1657:671:8:o;2333:247::-;2392:6;2445:2;2433:9;2424:7;2420:23;2416:32;2413:52;;;2461:1;2458;2451:12;2413:52;2500:9;2487:23;2519:31;2544:5;2519:31;:::i;:::-;2569:5;2333:247;-1:-1:-1;;;2333:247:8:o;2777:173::-;2844:20;;-1:-1:-1;;;;;;2893:32:8;;2883:43;;2873:71;;2940:1;2937;2930:12;2873:71;2777:173;;;:::o;2955:618::-;3043:6;3051;3059;3067;3120:2;3108:9;3099:7;3095:23;3091:32;3088:52;;;3136:1;3133;3126:12;3088:52;3175:9;3162:23;3194:31;3219:5;3194:31;:::i;:::-;3244:5;-1:-1:-1;3268:37:8;3301:2;3286:18;;3268:37;:::i;:::-;3258:47;;3356:2;3345:9;3341:18;3328:32;-1:-1:-1;;;;;3375:6:8;3372:30;3369:50;;;3415:1;3412;3405:12;3369:50;3454:59;3505:7;3496:6;3485:9;3481:22;3454:59;:::i;:::-;2955:618;;;;-1:-1:-1;3532:8:8;-1:-1:-1;;;;2955:618:8:o;3578:686::-;3666:6;3674;3682;3690;3743:2;3731:9;3722:7;3718:23;3714:32;3711:52;;;3759:1;3756;3749:12;3711:52;3798:9;3785:23;3817:31;3842:5;3817:31;:::i;:::-;3867:5;-1:-1:-1;3924:2:8;3909:18;;3896:32;3937:33;3896:32;3937:33;:::i;4269:319::-;4336:6;4344;4397:2;4385:9;4376:7;4372:23;4368:32;4365:52;;;4413:1;4410;4403:12;4365:52;4452:9;4439:23;4471:31;4496:5;4471:31;:::i;:::-;4521:5;-1:-1:-1;4545:37:8;4578:2;4563:18;;4545:37;:::i;:::-;4535:47;;4269:319;;;;;:::o;5864:267::-;5953:6;5948:3;5941:19;6005:6;5998:5;5991:4;5986:3;5982:14;5969:43;-1:-1:-1;6057:1:8;6032:16;;;6050:4;6028:27;;;6021:38;;;;6113:2;6092:15;;;-1:-1:-1;;6088:29:8;6079:39;;;6075:50;;5864:267::o;6136:344::-;-1:-1:-1;;;;;6323:32:8;;6305:51;;6392:2;6387;6372:18;;6365:30;;;-1:-1:-1;;6412:62:8;;6455:18;;6447:6;6439;6412:62;:::i;:::-;6404:70;6136:344;-1:-1:-1;;;;;6136:344:8:o;6485:181::-;6543:4;-1:-1:-1;;;;;6568:6:8;6565:30;6562:56;;;6598:18;;:::i;:::-;-1:-1:-1;6643:1:8;6639:14;6655:4;6635:25;;6485:181::o;6671:587::-;6724:5;6777:3;6770:4;6762:6;6758:17;6754:27;6744:55;;6795:1;6792;6785:12;6744:55;6824:6;6818:13;6855:48;6871:31;6899:2;6871:31;:::i;6855:48::-;6928:2;6919:7;6912:19;6950:4;6997:3;6990:4;6985:2;6977:6;6973:15;6969:26;6966:35;6963:55;;;7014:1;7011;7004:12;6963:55;7036:1;7046:134;7060:2;7057:1;7054:9;7046:134;;;7149:14;;;7145:23;;7139:30;7117:15;;;7113:24;;7106:64;7071:10;;7046:134;;;-1:-1:-1;;7225:1:8;7200:16;;;7218:4;7196:27;7189:38;;;;7204:7;6671:587;-1:-1:-1;;;6671:587:8:o;7263:1130::-;7367:6;7398:2;7441;7429:9;7420:7;7416:23;7412:32;7409:52;;;7457:1;7454;7447:12;7409:52;7490:9;7484:16;-1:-1:-1;;;;;7560:2:8;7552:6;7549:14;7546:34;;;7576:1;7573;7566:12;7546:34;7614:6;7603:9;7599:22;7589:32;;7659:7;7652:4;7648:2;7644:13;7640:27;7630:55;;7681:1;7678;7671:12;7630:55;7710:2;7704:9;7733:58;7749:41;7787:2;7749:41;:::i;7733:58::-;7825:15;;;7907:1;7903:10;;;;7895:19;;7891:28;;;7856:12;;;;7931:19;;;7928:39;;;7963:1;7960;7953:12;7928:39;7995:2;7991;7987:11;8007:356;8023:6;8018:3;8015:15;8007:356;;;8102:3;8096:10;8138:2;8125:11;8122:19;8119:109;;;8182:1;8211:2;8207;8200:14;8119:109;8253:67;8312:7;8307:2;8293:11;8289:2;8285:20;8281:29;8253:67;:::i;:::-;8241:80;;-1:-1:-1;8341:12:8;;;;8040;;8007:356;;;-1:-1:-1;8382:5:8;7263:1130;-1:-1:-1;;;;;;;;7263:1130:8:o;8398:127::-;8459:10;8454:3;8450:20;8447:1;8440:31;8490:4;8487:1;8480:15;8514:4;8511:1;8504:15;8530:361;8647:12;;8695:4;8684:16;;8678:23;-1:-1:-1;;;;;;8758:11:8;;;;8647:12;8678:23;8792:1;8781:13;;8778:107;;;8872:2;8866;8856:6;8853:1;8849:14;8846:1;8842:22;8838:31;8834:2;8830:40;8826:49;8817:58;;8778:107;;;;8530:361;;;:::o;8896:127::-;8957:10;8952:3;8948:20;8945:1;8938:31;8988:4;8985:1;8978:15;9012:4;9009:1;9002:15;9028:128;9095:9;;;9116:11;;;9113:37;;;9130:18;;:::i;9515:146::-;9602:13;;9624:31;9602:13;9624:31;:::i;9666:320::-;9753:6;9761;9814:2;9802:9;9793:7;9789:23;9785:32;9782:52;;;9830:1;9827;9820:12;9782:52;9862:9;9856:16;9881:31;9906:5;9881:31;:::i;:::-;9976:2;9961:18;;;;9955:25;9931:5;;9955:25;;-1:-1:-1;;;9666:320:8:o;9991:355::-;10193:2;10175:21;;;10232:2;10212:18;;;10205:30;10271:33;10266:2;10251:18;;10244:61;10337:2;10322:18;;9991:355::o;10351:341::-;10553:2;10535:21;;;10592:2;10572:18;;;10565:30;-1:-1:-1;;;10626:2:8;10611:18;;10604:47;10683:2;10668:18;;10351:341::o;10697:396::-;10785:6;10793;10846:2;10834:9;10825:7;10821:23;10817:32;10814:52;;;10862:1;10859;10852:12;10814:52;10891:9;10885:16;10875:26;;10945:2;10934:9;10930:18;10924:25;-1:-1:-1;;;;;10964:6:8;10961:30;10958:50;;;11004:1;11001;10994:12;10958:50;11027:60;11079:7;11070:6;11059:9;11055:22;11027:60;:::i;:::-;11017:70;;;10697:396;;;;;:::o;11457:135::-;11496:3;11517:17;;;11514:43;;11537:18;;:::i;:::-;-1:-1:-1;11584:1:8;11573:13;;11457:135::o;11597:440::-;-1:-1:-1;;;;;11810:32:8;;11792:51;;-1:-1:-1;;;;;;11879:33:8;;11874:2;11859:18;;11852:61;11949:2;11944;11929:18;;11922:30;;;-1:-1:-1;;11969:62:8;;12012:18;;12004:6;11996;11969:62;:::i;:::-;11961:70;11597:440;-1:-1:-1;;;;;;11597:440:8:o;12042:401::-;12137:6;12145;12198:2;12186:9;12177:7;12173:23;12169:32;12166:52;;;12214:1;12211;12204:12;12166:52;12246:9;12240:16;12265:31;12290:5;12265:31;:::i;:::-;12365:2;12350:18;;12344:25;12315:5;;-1:-1:-1;12378:33:8;12344:25;12378:33;:::i;:::-;12430:7;12420:17;;;12042:401;;;;;:::o;12448:457::-;12545:6;12553;12561;12614:2;12602:9;12593:7;12589:23;12585:32;12582:52;;;12630:1;12627;12620:12;12582:52;12659:9;12653:16;12643:26;;12709:2;12698:9;12694:18;12688:25;12678:35;;12757:2;12746:9;12742:18;12736:25;-1:-1:-1;;;;;12776:6:8;12773:30;12770:50;;;12816:1;12813;12806:12;12770:50;12839:60;12891:7;12882:6;12871:9;12867:22;12839:60;:::i;:::-;12829:70;;;12448:457;;;;;:::o;13257:331::-;13362:9;13373;13415:8;13403:10;13400:24;13397:44;;;13437:1;13434;13427:12;13397:44;13466:6;13456:8;13453:20;13450:40;;;13486:1;13483;13476:12;13450:40;-1:-1:-1;;13512:23:8;;;13557:25;;;;;-1:-1:-1;13257:331:8:o;13593:323::-;-1:-1:-1;;;;;;13713:19:8;;13789:11;;;;13820:1;13812:10;;13809:101;;;13897:2;13891;13884:3;13881:1;13877:11;13874:1;13870:19;13866:28;13862:2;13858:37;13854:46;13845:55;;13809:101;;;13593:323;;;;:::o;14271:1240::-;14410:6;14418;14426;14434;14442;14495:3;14483:9;14474:7;14470:23;14466:33;14463:53;;;14512:1;14509;14502:12;14463:53;14541:9;14535:16;14525:26;;14570:2;14612;14601:9;14597:18;14591:25;14581:35;;14660:2;14649:9;14645:18;14639:25;-1:-1:-1;;;;;14679:6:8;14676:30;14673:50;;;14719:1;14716;14709:12;14673:50;14742:22;;14795:4;14787:13;;14783:27;-1:-1:-1;14773:55:8;;14824:1;14821;14814:12;14773:55;14853:2;14847:9;14876:58;14892:41;14930:2;14892:41;:::i;14876:58::-;14968:15;;;15050:1;15046:10;;;;15038:19;;15034:28;;;14999:12;;;;15074:19;;;15071:39;;;15106:1;15103;15096:12;15071:39;15130:11;;;;15150:210;15166:6;15161:3;15158:15;15150:210;;;15239:3;15233:10;15256:31;15281:5;15256:31;:::i;:::-;15300:18;;15183:12;;;;15338;;;;15150:210;;;15379:5;15369:15;;;;;;;15403:57;15456:2;15445:9;15441:18;15403:57;:::i;:::-;15393:67;;15500:3;15489:9;15485:19;15479:26;15469:36;;14271:1240;;;;;;;;:::o;15516:259::-;15594:6;15647:2;15635:9;15626:7;15622:23;15618:32;15615:52;;;15663:1;15660;15653:12;15615:52;15695:9;15689:16;15714:31;15739:5;15714:31;:::i;16190:125::-;16255:9;;;16276:10;;;16273:36;;;16289:18;;:::i;16320:874::-;16395:5;16443:4;16431:9;16426:3;16422:19;16418:30;16415:50;;;16461:1;16458;16451:12;16415:50;16494:2;16488:9;16536:4;16528:6;16524:17;-1:-1:-1;;;;;16628:6:8;16616:10;16613:22;16608:2;16596:10;16593:18;16590:46;16587:72;;;16639:18;;:::i;:::-;16679:10;16675:2;16668:22;16708:6;16699:15;;16743:9;16737:16;16723:30;;16776:2;16768:6;16765:14;16762:34;;;16792:1;16789;16782:12;16762:34;;16820:56;16872:3;16863:6;16852:9;16848:22;16820:56;:::i;:::-;16812:6;16805:72;;16922:2;16911:9;16907:18;16901:25;16935:33;16960:7;16935:33;:::i;:::-;17001:7;16996:2;16988:6;16984:15;16977:32;;17063:2;17052:9;17048:18;17042:25;17037:2;17029:6;17025:15;17018:50;17122:2;17111:9;17107:18;17101:25;17096:2;17088:6;17084:15;17077:50;17182:3;17171:9;17167:19;17161:26;17155:3;17147:6;17143:16;17136:52;;16320:874;;;;:::o;17199:379::-;17303:6;17356:2;17344:9;17335:7;17331:23;17327:32;17324:52;;;17372:1;17369;17362:12;17324:52;17405:9;17399:16;-1:-1:-1;;;;;17430:6:8;17427:30;17424:50;;;17470:1;17467;17460:12;17424:50;17493:79;17564:7;17555:6;17544:9;17540:22;17493:79;:::i;:::-;17483:89;17199:379;-1:-1:-1;;;;17199:379:8:o","linkReferences":{}},"methodIdentifiers":{"allowApprovalDestination(address,string)":"98b3cc39","allowAsset(address,string)":"86b6dbe5","allowCallSite(address,bytes4,string)":"5e4ccace","allowDelegationApprovalDestination(address,string)":"63cc17f2","allowReceiver(address,string)":"72e548a9","allowSender(address,string)":"fa2c59c8","allowWithdrawDestination(address,string)":"5ace1d92","allowedApprovalDestinations(address)":"eb0de042","allowedAssets(address)":"a4c1cccb","allowedCallSites(address,bytes4)":"a847cf4d","allowedDelegationApprovalDestinations(address)":"4b941268","allowedReceivers(address)":"3cf20025","allowedSenders(address)":"fadbcf48","allowedWithdrawDestinations(address)":"07ef00cf","callSiteCount()":"a9fc3d4f","getGovernanceAddress()":"73252494","getInternalVersion()":"fdedfa27","isAllowedApprovalDestination(address)":"1d49039c","isAllowedAsset(address)":"c537bed0","isAllowedCallSite(address,bytes4)":"713ebf3b","isAllowedDelegationApprovalDestination(address)":"2dc32a61","isAllowedReceiver(address)":"d075f9bb","isAllowedSender(address)":"be8c97b0","isAllowedWithdrawDestination(address)":"efb47bff","owner()":"8da5cb5b","removeApprovalDestination(address,string)":"04a3ba25","removeAsset(address,string)":"f901dc33","removeCallSite(address,bytes4,string)":"d7334c9d","removeDelegationApprovalDestination(address,string)":"f259a073","removeReceiver(address,string)":"2d12d788","removeSender(address,string)":"a67e1f54","removeWithdrawDestination(address,string)":"8c2fdf9e","renounceOwnership()":"715018a6","transferOwnership(address)":"f2fde38b","validate1deltaPath(bytes)":"a1b6b430","validateCall(address,address,bytes)":"6d5025f1","validateUniswapV3Path(bytes)":"1c123e77","validate_1deltaMulticall(bytes)":"07ac3562","validate_approve(bytes)":"4b956bd8","validate_approveDelegation(bytes)":"957dc6c0","validate_deposit(bytes)":"5e62deee","validate_exactInput(bytes)":"ebe26816","validate_exactOutput(bytes)":"e98539c5","validate_flashSwapAllOut(bytes)":"425f49d0","validate_flashSwapExactInt(bytes)":"ca963c50","validate_flashSwapExactOut(bytes)":"6ad11353","validate_swapExactTokensForTokens(bytes)":"761bcd9c","validate_transfer(bytes)":"1710a4f2","validate_transferERC20AllIn(bytes)":"7ea44655","validate_transferERC20In(bytes)":"59b92be9","validate_withdraw(bytes)":"e9cd02e7","whitelistOnedelta(address,address,string)":"f26749f3","whitelistToken(address,string)":"ee5462cc","whitelistTokenForDelegation(address,string)":"6d9a1423","whitelistUniswapV2Router(address,string)":"3ea35551","whitelistUniswapV3Router(address,string)":"34ec8d7e"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"ApprovalDestinationApproved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"ApprovalDestinationRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"AssetApproved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"AssetRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"CallSiteApproved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"CallSiteRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"DelegationApprovalDestinationApproved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"DelegationApprovalDestinationRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"ReceiverApproved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"ReceiverRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"SenderApproved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"SenderRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"WithdrawDestinationApproved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"WithdrawDestinationRemoved\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"allowApprovalDestination\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"allowAsset\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"allowCallSite\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"allowDelegationApprovalDestination\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"allowReceiver\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"allowSender\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"allowWithdrawDestination\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"}],\"name\":\"allowedApprovalDestinations\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"allowedAssets\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"allowedCallSites\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"}],\"name\":\"allowedDelegationApprovalDestinations\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"allowedReceivers\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"allowedSenders\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"}],\"name\":\"allowedWithdrawDestinations\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"callSiteCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGovernanceAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getInternalVersion\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"isAllowedApprovalDestination\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"isAllowedAsset\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"isAllowedCallSite\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"isAllowedDelegationApprovalDestination\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"isAllowedReceiver\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"isAllowedSender\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"isAllowedWithdrawDestination\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"removeApprovalDestination\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"removeAsset\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"removeCallSite\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"removeDelegationApprovalDestination\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"removeReceiver\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"removeSender\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"removeWithdrawDestination\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"path\",\"type\":\"bytes\"}],\"name\":\"validate1deltaPath\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"callDataWithSelector\",\"type\":\"bytes\"}],\"name\":\"validateCall\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"path\",\"type\":\"bytes\"}],\"name\":\"validateUniswapV3Path\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"name\":\"validate_1deltaMulticall\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"name\":\"validate_approve\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"name\":\"validate_approveDelegation\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"name\":\"validate_deposit\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"name\":\"validate_exactInput\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"name\":\"validate_exactOutput\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"name\":\"validate_flashSwapAllOut\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"name\":\"validate_flashSwapExactInt\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"name\":\"validate_flashSwapExactOut\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"name\":\"validate_swapExactTokensForTokens\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"name\":\"validate_transfer\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"name\":\"validate_transferERC20AllIn\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"name\":\"validate_transferERC20In\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"name\":\"validate_withdraw\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"brokerProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"lendingPool\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"whitelistOnedelta\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"whitelistToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"whitelistTokenForDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"whitelistUniswapV2Router\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"whitelistUniswapV3Router\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"stateVariables\":{\"ADDR_SIZE\":{\"details\":\"The length of the bytes encoded address\"},\"ONEDELTA_ACTION_SIZE\":{\"details\":\"The length of the bytes encoded action\"},\"ONEDELTA_FEE_SIZE\":{\"details\":\"The length of the bytes encoded pool fee\"},\"ONEDELTA_MULTIPLE_POOLS_MIN_LENGTH\":{\"details\":\"The minimum length of an encoding that contains 2 or more pools\"},\"ONEDELTA_NEXT_OFFSET\":{\"details\":\"The offset of a single token address, fee, pid and action\"},\"ONEDELTA_PID_SIZE\":{\"details\":\"The length of the bytes encoded DEX ID\"},\"ONEDELTA_POP_OFFSET\":{\"details\":\"The offset of an encoded pool key\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getGovernanceAddress()\":{\"notice\":\"Get the address of the proto DAO\"},\"getInternalVersion()\":{\"notice\":\"Track version during internal development. We bump up when new whitelistings added.\"},\"validate1deltaPath(bytes)\":{\"notice\":\"Our implementation of 1delta path decoding and validation using similar approach as Uniswap v3 `Path.sol` Read more: - How 1delta encodes the path: https://github.com/1delta-DAO/contracts-delegation/blob/4f27e1593c564c419ff042cdd932ed52d04216bf/test-ts/1delta/shared/aggregatorPath.ts#L5-L32 - How 1delta decodes the path: https://github.com/1delta-DAO/contracts-delegation/blob/4f27e1593c564c419ff042cdd932ed52d04216bf/contracts/1delta/modules/aave/MarginTrading.sol#L54-L60\"}},\"notice\":\"Prototype guard implementation. - Hardcoded actions for Uniswap v2, v3, 1delta\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/GuardV0.sol\":\"GuardV0\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/=lib/openzeppelin-contracts/contracts/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin/=lib/openzeppelin-contracts/contracts/\"]},\"sources\":{\"lib/openzeppelin-contracts/contracts/access/Ownable.sol\":{\"keccak256\":\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fc980984badf3984b6303b377711220e067722bbd6a135b24669ff5069ef9f32\",\"dweb:/ipfs/QmPHXMSXj99XjSVM21YsY6aNtLLjLVXDbyN76J5HQYvvrz\"]},\"lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"keccak256\":\"0xa92e4fa126feb6907daa0513ddd816b2eb91f30a808de54f63c17d0e162c3439\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a367861093b74443b137564d3f3c472f70bcf114739e62059c939f25e315706c\",\"dweb:/ipfs/Qmd7JMpcxD9RuQjK3uM3EzJUgSqdN8vzp8eytEiuwxQJ6h\"]},\"src/GuardV0.sol\":{\"keccak256\":\"0x9a9aab013b396c3716f8bb91f21c213c04297f6caa6ad15c34532dafa240b9ab\",\"urls\":[\"bzz-raw://75e862d1fc197f8a6b3016971b610558906b657335d7f238c7c9d31f8f46252b\",\"dweb:/ipfs/QmTEXH8E9B7zkxnG4XoFaQav36wG2p93wjAap8x36sEtTq\"]},\"src/IGuard.sol\":{\"keccak256\":\"0xb7b3ef010870980bd812779fd5dc8133d6dccb0e2b5d390dcfdc7a61c5064559\",\"urls\":[\"bzz-raw://17226392a130d807b0e1cd46f3b3fa8bf36d4f4cac6218f09d2dca75605945a3\",\"dweb:/ipfs/QmYgn6g7B2wU6VYrhtZicWohw795yyu6qUD1riWaG2hikD\"]},\"src/lib/BytesLib.sol\":{\"keccak256\":\"0x7446c0f0de6eb147f0f3e40b3a72e39d02a951e8c453437dcc6b3c06007bc62a\",\"license\":\"Unlicense\",\"urls\":[\"bzz-raw://1b2b64668ea4287dfe75e1029fef387b0e3ae191b784d1bc5be01edac6d1d5c5\",\"dweb:/ipfs/Qma3zAe3Svez1kdGc5F356m9tRjCDg8F8tAocbd5Qk13PE\"]},\"src/lib/Path.sol\":{\"keccak256\":\"0xb22c562b5175d50dbcc2224325666090d985f052abdcfe275c8dfc884e34de61\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://27aeff27314476ab3c77313ae1f0c5b2442b86315f5ce741cb2150a87c3cbad3\",\"dweb:/ipfs/QmQNno2g1CJvjnH6ych4LuHr1UZDEZPACgYG4XvivxGrqV\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.23+commit.f704f362"},"language":"Solidity","output":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":false},{"internalType":"string","name":"notes","type":"string","indexed":false}],"type":"event","name":"ApprovalDestinationApproved","anonymous":false},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":false},{"internalType":"string","name":"notes","type":"string","indexed":false}],"type":"event","name":"ApprovalDestinationRemoved","anonymous":false},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":false},{"internalType":"string","name":"notes","type":"string","indexed":false}],"type":"event","name":"AssetApproved","anonymous":false},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":false},{"internalType":"string","name":"notes","type":"string","indexed":false}],"type":"event","name":"AssetRemoved","anonymous":false},{"inputs":[{"internalType":"address","name":"target","type":"address","indexed":false},{"internalType":"bytes4","name":"selector","type":"bytes4","indexed":false},{"internalType":"string","name":"notes","type":"string","indexed":false}],"type":"event","name":"CallSiteApproved","anonymous":false},{"inputs":[{"internalType":"address","name":"target","type":"address","indexed":false},{"internalType":"bytes4","name":"selector","type":"bytes4","indexed":false},{"internalType":"string","name":"notes","type":"string","indexed":false}],"type":"event","name":"CallSiteRemoved","anonymous":false},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":false},{"internalType":"string","name":"notes","type":"string","indexed":false}],"type":"event","name":"DelegationApprovalDestinationApproved","anonymous":false},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":false},{"internalType":"string","name":"notes","type":"string","indexed":false}],"type":"event","name":"DelegationApprovalDestinationRemoved","anonymous":false},{"inputs":[{"internalType":"address","name":"previousOwner","type":"address","indexed":true},{"internalType":"address","name":"newOwner","type":"address","indexed":true}],"type":"event","name":"OwnershipTransferred","anonymous":false},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":false},{"internalType":"string","name":"notes","type":"string","indexed":false}],"type":"event","name":"ReceiverApproved","anonymous":false},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":false},{"internalType":"string","name":"notes","type":"string","indexed":false}],"type":"event","name":"ReceiverRemoved","anonymous":false},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":false},{"internalType":"string","name":"notes","type":"string","indexed":false}],"type":"event","name":"SenderApproved","anonymous":false},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":false},{"internalType":"string","name":"notes","type":"string","indexed":false}],"type":"event","name":"SenderRemoved","anonymous":false},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":false},{"internalType":"string","name":"notes","type":"string","indexed":false}],"type":"event","name":"WithdrawDestinationApproved","anonymous":false},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":false},{"internalType":"string","name":"notes","type":"string","indexed":false}],"type":"event","name":"WithdrawDestinationRemoved","anonymous":false},{"inputs":[{"internalType":"address","name":"destination","type":"address"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"allowApprovalDestination"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"allowAsset"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes4","name":"selector","type":"bytes4"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"allowCallSite"},{"inputs":[{"internalType":"address","name":"destination","type":"address"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"allowDelegationApprovalDestination"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"allowReceiver"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"allowSender"},{"inputs":[{"internalType":"address","name":"destination","type":"address"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"allowWithdrawDestination"},{"inputs":[{"internalType":"address","name":"destination","type":"address"}],"stateMutability":"view","type":"function","name":"allowedApprovalDestinations","outputs":[{"internalType":"bool","name":"allowed","type":"bool"}]},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"stateMutability":"view","type":"function","name":"allowedAssets","outputs":[{"internalType":"bool","name":"allowed","type":"bool"}]},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes4","name":"selector","type":"bytes4"}],"stateMutability":"view","type":"function","name":"allowedCallSites","outputs":[{"internalType":"bool","name":"allowed","type":"bool"}]},{"inputs":[{"internalType":"address","name":"destination","type":"address"}],"stateMutability":"view","type":"function","name":"allowedDelegationApprovalDestinations","outputs":[{"internalType":"bool","name":"allowed","type":"bool"}]},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"stateMutability":"view","type":"function","name":"allowedReceivers","outputs":[{"internalType":"bool","name":"allowed","type":"bool"}]},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"stateMutability":"view","type":"function","name":"allowedSenders","outputs":[{"internalType":"bool","name":"allowed","type":"bool"}]},{"inputs":[{"internalType":"address","name":"destination","type":"address"}],"stateMutability":"view","type":"function","name":"allowedWithdrawDestinations","outputs":[{"internalType":"bool","name":"allowed","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"callSiteCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getGovernanceAddress","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"pure","type":"function","name":"getInternalVersion","outputs":[{"internalType":"uint8","name":"","type":"uint8"}]},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"stateMutability":"view","type":"function","name":"isAllowedApprovalDestination","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"stateMutability":"view","type":"function","name":"isAllowedAsset","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes4","name":"selector","type":"bytes4"}],"stateMutability":"view","type":"function","name":"isAllowedCallSite","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"stateMutability":"view","type":"function","name":"isAllowedDelegationApprovalDestination","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"stateMutability":"view","type":"function","name":"isAllowedReceiver","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"stateMutability":"view","type":"function","name":"isAllowedSender","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"stateMutability":"view","type":"function","name":"isAllowedWithdrawDestination","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"destination","type":"address"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"removeApprovalDestination"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"removeAsset"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes4","name":"selector","type":"bytes4"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"removeCallSite"},{"inputs":[{"internalType":"address","name":"destination","type":"address"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"removeDelegationApprovalDestination"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"removeReceiver"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"removeSender"},{"inputs":[{"internalType":"address","name":"destination","type":"address"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"removeWithdrawDestination"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"renounceOwnership"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"transferOwnership"},{"inputs":[{"internalType":"bytes","name":"path","type":"bytes"}],"stateMutability":"view","type":"function","name":"validate1deltaPath"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes","name":"callDataWithSelector","type":"bytes"}],"stateMutability":"view","type":"function","name":"validateCall"},{"inputs":[{"internalType":"bytes","name":"path","type":"bytes"}],"stateMutability":"view","type":"function","name":"validateUniswapV3Path"},{"inputs":[{"internalType":"bytes","name":"callData","type":"bytes"}],"stateMutability":"view","type":"function","name":"validate_1deltaMulticall"},{"inputs":[{"internalType":"bytes","name":"callData","type":"bytes"}],"stateMutability":"view","type":"function","name":"validate_approve"},{"inputs":[{"internalType":"bytes","name":"callData","type":"bytes"}],"stateMutability":"view","type":"function","name":"validate_approveDelegation"},{"inputs":[{"internalType":"bytes","name":"callData","type":"bytes"}],"stateMutability":"view","type":"function","name":"validate_deposit"},{"inputs":[{"internalType":"bytes","name":"callData","type":"bytes"}],"stateMutability":"view","type":"function","name":"validate_exactInput"},{"inputs":[{"internalType":"bytes","name":"callData","type":"bytes"}],"stateMutability":"view","type":"function","name":"validate_exactOutput"},{"inputs":[{"internalType":"bytes","name":"callData","type":"bytes"}],"stateMutability":"view","type":"function","name":"validate_flashSwapAllOut"},{"inputs":[{"internalType":"bytes","name":"callData","type":"bytes"}],"stateMutability":"view","type":"function","name":"validate_flashSwapExactInt"},{"inputs":[{"internalType":"bytes","name":"callData","type":"bytes"}],"stateMutability":"view","type":"function","name":"validate_flashSwapExactOut"},{"inputs":[{"internalType":"bytes","name":"callData","type":"bytes"}],"stateMutability":"view","type":"function","name":"validate_swapExactTokensForTokens"},{"inputs":[{"internalType":"bytes","name":"callData","type":"bytes"}],"stateMutability":"view","type":"function","name":"validate_transfer"},{"inputs":[{"internalType":"bytes","name":"callData","type":"bytes"}],"stateMutability":"view","type":"function","name":"validate_transferERC20AllIn"},{"inputs":[{"internalType":"bytes","name":"callData","type":"bytes"}],"stateMutability":"view","type":"function","name":"validate_transferERC20In"},{"inputs":[{"internalType":"bytes","name":"callData","type":"bytes"}],"stateMutability":"view","type":"function","name":"validate_withdraw"},{"inputs":[{"internalType":"address","name":"brokerProxy","type":"address"},{"internalType":"address","name":"lendingPool","type":"address"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"whitelistOnedelta"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"whitelistToken"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"whitelistTokenForDelegation"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"whitelistUniswapV2Router"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"whitelistUniswapV3Router"}],"devdoc":{"kind":"dev","methods":{"owner()":{"details":"Returns the address of the current owner."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."}},"version":1},"userdoc":{"kind":"user","methods":{"getGovernanceAddress()":{"notice":"Get the address of the proto DAO"},"getInternalVersion()":{"notice":"Track version during internal development. We bump up when new whitelistings added."},"validate1deltaPath(bytes)":{"notice":"Our implementation of 1delta path decoding and validation using similar approach as Uniswap v3 `Path.sol` Read more: - How 1delta encodes the path: https://github.com/1delta-DAO/contracts-delegation/blob/4f27e1593c564c419ff042cdd932ed52d04216bf/test-ts/1delta/shared/aggregatorPath.ts#L5-L32 - How 1delta decodes the path: https://github.com/1delta-DAO/contracts-delegation/blob/4f27e1593c564c419ff042cdd932ed52d04216bf/contracts/1delta/modules/aave/MarginTrading.sol#L54-L60"}},"version":1}},"settings":{"remappings":["@openzeppelin/=lib/openzeppelin-contracts/contracts/","ds-test/=lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin/=lib/openzeppelin-contracts/contracts/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/GuardV0.sol":"GuardV0"},"evmVersion":"paris","libraries":{}},"sources":{"lib/openzeppelin-contracts/contracts/access/Ownable.sol":{"keccak256":"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218","urls":["bzz-raw://fc980984badf3984b6303b377711220e067722bbd6a135b24669ff5069ef9f32","dweb:/ipfs/QmPHXMSXj99XjSVM21YsY6aNtLLjLVXDbyN76J5HQYvvrz"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Context.sol":{"keccak256":"0xa92e4fa126feb6907daa0513ddd816b2eb91f30a808de54f63c17d0e162c3439","urls":["bzz-raw://a367861093b74443b137564d3f3c472f70bcf114739e62059c939f25e315706c","dweb:/ipfs/Qmd7JMpcxD9RuQjK3uM3EzJUgSqdN8vzp8eytEiuwxQJ6h"],"license":"MIT"},"src/GuardV0.sol":{"keccak256":"0x9a9aab013b396c3716f8bb91f21c213c04297f6caa6ad15c34532dafa240b9ab","urls":["bzz-raw://75e862d1fc197f8a6b3016971b610558906b657335d7f238c7c9d31f8f46252b","dweb:/ipfs/QmTEXH8E9B7zkxnG4XoFaQav36wG2p93wjAap8x36sEtTq"],"license":null},"src/IGuard.sol":{"keccak256":"0xb7b3ef010870980bd812779fd5dc8133d6dccb0e2b5d390dcfdc7a61c5064559","urls":["bzz-raw://17226392a130d807b0e1cd46f3b3fa8bf36d4f4cac6218f09d2dca75605945a3","dweb:/ipfs/QmYgn6g7B2wU6VYrhtZicWohw795yyu6qUD1riWaG2hikD"],"license":null},"src/lib/BytesLib.sol":{"keccak256":"0x7446c0f0de6eb147f0f3e40b3a72e39d02a951e8c453437dcc6b3c06007bc62a","urls":["bzz-raw://1b2b64668ea4287dfe75e1029fef387b0e3ae191b784d1bc5be01edac6d1d5c5","dweb:/ipfs/Qma3zAe3Svez1kdGc5F356m9tRjCDg8F8tAocbd5Qk13PE"],"license":"Unlicense"},"src/lib/Path.sol":{"keccak256":"0xb22c562b5175d50dbcc2224325666090d985f052abdcfe275c8dfc884e34de61","urls":["bzz-raw://27aeff27314476ab3c77313ae1f0c5b2442b86315f5ce741cb2150a87c3cbad3","dweb:/ipfs/QmQNno2g1CJvjnH6ych4LuHr1UZDEZPACgYG4XvivxGrqV"],"license":"GPL-2.0-or-later"}},"version":1},"ast":{"absolutePath":"src/GuardV0.sol","id":1752,"exportedSymbols":{"BytesLib":[2099],"Context":[220],"GuardV0":[1751],"IGuard":[1763],"Ownable":[112],"Path":[2232]},"nodeType":"SourceUnit","src":"56:19646:3","nodes":[{"id":222,"nodeType":"PragmaDirective","src":"56:23:3","nodes":[],"literals":["solidity","^","0.8",".0"]},{"id":223,"nodeType":"ImportDirective","src":"81:42:3","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/access/Ownable.sol","file":"@openzeppelin/access/Ownable.sol","nameLocation":"-1:-1:-1","scope":1752,"sourceUnit":113,"symbolAliases":[],"unitAlias":""},{"id":224,"nodeType":"ImportDirective","src":"124:24:3","nodes":[],"absolutePath":"src/lib/Path.sol","file":"./lib/Path.sol","nameLocation":"-1:-1:-1","scope":1752,"sourceUnit":2233,"symbolAliases":[],"unitAlias":""},{"id":225,"nodeType":"ImportDirective","src":"149:22:3","nodes":[],"absolutePath":"src/IGuard.sol","file":"./IGuard.sol","nameLocation":"-1:-1:-1","scope":1752,"sourceUnit":1764,"symbolAliases":[],"unitAlias":""},{"id":1751,"nodeType":"ContractDefinition","src":"272:19430:3","nodes":[{"id":233,"nodeType":"UsingForDirective","src":"314:21:3","nodes":[],"global":false,"libraryName":{"id":231,"name":"Path","nameLocations":["320:4:3"],"nodeType":"IdentifierPath","referencedDeclaration":2232,"src":"320:4:3"},"typeName":{"id":232,"name":"bytes","nodeType":"ElementaryTypeName","src":"329:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}}},{"id":236,"nodeType":"UsingForDirective","src":"340:25:3","nodes":[],"global":false,"libraryName":{"id":234,"name":"BytesLib","nameLocations":["346:8:3"],"nodeType":"IdentifierPath","referencedDeclaration":2099,"src":"346:8:3"},"typeName":{"id":235,"name":"bytes","nodeType":"ElementaryTypeName","src":"359:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}}},{"id":240,"nodeType":"VariableDeclaration","src":"597:39:3","nodes":[],"constant":true,"documentation":{"id":237,"nodeType":"StructuredDocumentation","src":"544:48:3","text":"@dev The length of the bytes encoded address"},"mutability":"constant","name":"ADDR_SIZE","nameLocation":"622:9:3","scope":1751,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":238,"name":"uint256","nodeType":"ElementaryTypeName","src":"597:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3230","id":239,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"634:2:3","typeDescriptions":{"typeIdentifier":"t_rational_20_by_1","typeString":"int_const 20"},"value":"20"},"visibility":"private"},{"id":244,"nodeType":"VariableDeclaration","src":"696:46:3","nodes":[],"constant":true,"documentation":{"id":241,"nodeType":"StructuredDocumentation","src":"642:49:3","text":"@dev The length of the bytes encoded pool fee"},"mutability":"constant","name":"ONEDELTA_FEE_SIZE","nameLocation":"721:17:3","scope":1751,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":242,"name":"uint256","nodeType":"ElementaryTypeName","src":"696:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"33","id":243,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"741:1:3","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"visibility":"private"},{"id":248,"nodeType":"VariableDeclaration","src":"800:46:3","nodes":[],"constant":true,"documentation":{"id":245,"nodeType":"StructuredDocumentation","src":"748:47:3","text":"@dev The length of the bytes encoded DEX ID"},"mutability":"constant","name":"ONEDELTA_PID_SIZE","nameLocation":"825:17:3","scope":1751,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":246,"name":"uint256","nodeType":"ElementaryTypeName","src":"800:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"31","id":247,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"845:1:3","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"visibility":"private"},{"id":252,"nodeType":"VariableDeclaration","src":"904:49:3","nodes":[],"constant":true,"documentation":{"id":249,"nodeType":"StructuredDocumentation","src":"852:47:3","text":"@dev The length of the bytes encoded action"},"mutability":"constant","name":"ONEDELTA_ACTION_SIZE","nameLocation":"929:20:3","scope":1751,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":250,"name":"uint256","nodeType":"ElementaryTypeName","src":"904:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"31","id":251,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"952:1:3","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"visibility":"private"},{"id":262,"nodeType":"VariableDeclaration","src":"1030:120:3","nodes":[],"constant":true,"documentation":{"id":253,"nodeType":"StructuredDocumentation","src":"959:66:3","text":"@dev The offset of a single token address, fee, pid and action"},"mutability":"constant","name":"ONEDELTA_NEXT_OFFSET","nameLocation":"1055:20:3","scope":1751,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":254,"name":"uint256","nodeType":"ElementaryTypeName","src":"1030:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":261,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":259,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":257,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":255,"name":"ADDR_SIZE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":240,"src":"1078:9:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":256,"name":"ONEDELTA_FEE_SIZE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":244,"src":"1090:17:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1078:29:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":258,"name":"ONEDELTA_PID_SIZE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":248,"src":"1110:17:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1078:49:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":260,"name":"ONEDELTA_ACTION_SIZE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":252,"src":"1130:20:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1078:72:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"id":268,"nodeType":"VariableDeclaration","src":"1203:79:3","nodes":[],"constant":true,"documentation":{"id":263,"nodeType":"StructuredDocumentation","src":"1156:42:3","text":"@dev The offset of an encoded pool key"},"mutability":"constant","name":"ONEDELTA_POP_OFFSET","nameLocation":"1228:19:3","scope":1751,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":264,"name":"uint256","nodeType":"ElementaryTypeName","src":"1203:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":267,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":265,"name":"ONEDELTA_NEXT_OFFSET","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":262,"src":"1250:20:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":266,"name":"ADDR_SIZE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":240,"src":"1273:9:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1250:32:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"id":274,"nodeType":"VariableDeclaration","src":"1365:104:3","nodes":[],"constant":true,"documentation":{"id":269,"nodeType":"StructuredDocumentation","src":"1288:72:3","text":"@dev The minimum length of an encoding that contains 2 or more pools"},"mutability":"constant","name":"ONEDELTA_MULTIPLE_POOLS_MIN_LENGTH","nameLocation":"1390:34:3","scope":1751,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":270,"name":"uint256","nodeType":"ElementaryTypeName","src":"1365:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":273,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":271,"name":"ONEDELTA_POP_OFFSET","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":268,"src":"1427:19:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":272,"name":"ONEDELTA_NEXT_OFFSET","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":262,"src":"1449:20:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1427:42:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"id":285,"nodeType":"StructDefinition","src":"1476:164:3","nodes":[],"canonicalName":"GuardV0.ExactInputParams","members":[{"constant":false,"id":276,"mutability":"mutable","name":"path","nameLocation":"1516:4:3","nodeType":"VariableDeclaration","scope":285,"src":"1510:10:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":275,"name":"bytes","nodeType":"ElementaryTypeName","src":"1510:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":278,"mutability":"mutable","name":"recipient","nameLocation":"1538:9:3","nodeType":"VariableDeclaration","scope":285,"src":"1530:17:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":277,"name":"address","nodeType":"ElementaryTypeName","src":"1530:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":280,"mutability":"mutable","name":"deadline","nameLocation":"1565:8:3","nodeType":"VariableDeclaration","scope":285,"src":"1557:16:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":279,"name":"uint256","nodeType":"ElementaryTypeName","src":"1557:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":282,"mutability":"mutable","name":"amountIn","nameLocation":"1591:8:3","nodeType":"VariableDeclaration","scope":285,"src":"1583:16:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":281,"name":"uint256","nodeType":"ElementaryTypeName","src":"1583:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":284,"mutability":"mutable","name":"amountOutMinimum","nameLocation":"1617:16:3","nodeType":"VariableDeclaration","scope":285,"src":"1609:24:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":283,"name":"uint256","nodeType":"ElementaryTypeName","src":"1609:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"ExactInputParams","nameLocation":"1483:16:3","scope":1751,"visibility":"public"},{"id":296,"nodeType":"StructDefinition","src":"1646:165:3","nodes":[],"canonicalName":"GuardV0.ExactOutputParams","members":[{"constant":false,"id":287,"mutability":"mutable","name":"path","nameLocation":"1687:4:3","nodeType":"VariableDeclaration","scope":296,"src":"1681:10:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":286,"name":"bytes","nodeType":"ElementaryTypeName","src":"1681:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":289,"mutability":"mutable","name":"recipient","nameLocation":"1709:9:3","nodeType":"VariableDeclaration","scope":296,"src":"1701:17:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":288,"name":"address","nodeType":"ElementaryTypeName","src":"1701:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":291,"mutability":"mutable","name":"deadline","nameLocation":"1736:8:3","nodeType":"VariableDeclaration","scope":296,"src":"1728:16:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":290,"name":"uint256","nodeType":"ElementaryTypeName","src":"1728:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":293,"mutability":"mutable","name":"amountOut","nameLocation":"1762:9:3","nodeType":"VariableDeclaration","scope":296,"src":"1754:17:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":292,"name":"uint256","nodeType":"ElementaryTypeName","src":"1754:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":295,"mutability":"mutable","name":"amountInMaximum","nameLocation":"1789:15:3","nodeType":"VariableDeclaration","scope":296,"src":"1781:23:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":294,"name":"uint256","nodeType":"ElementaryTypeName","src":"1781:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"ExactOutputParams","nameLocation":"1653:17:3","scope":1751,"visibility":"public"},{"id":302,"nodeType":"VariableDeclaration","src":"1848:91:3","nodes":[],"constant":false,"functionSelector":"a847cf4d","mutability":"mutable","name":"allowedCallSites","nameLocation":"1923:16:3","scope":1751,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_bytes4_$_t_bool_$_$","typeString":"mapping(address => mapping(bytes4 => bool))"},"typeName":{"id":301,"keyName":"target","keyNameLocation":"1864:6:3","keyType":{"id":297,"name":"address","nodeType":"ElementaryTypeName","src":"1856:7:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1848:67:3","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_bytes4_$_t_bool_$_$","typeString":"mapping(address => mapping(bytes4 => bool))"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":300,"keyName":"selector","keyNameLocation":"1889:8:3","keyType":{"id":298,"name":"bytes4","nodeType":"ElementaryTypeName","src":"1882:6:3","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"Mapping","src":"1874:40:3","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes4_$_t_bool_$","typeString":"mapping(bytes4 => bool)"},"valueName":"allowed","valueNameLocation":"1906:7:3","valueType":{"id":299,"name":"bool","nodeType":"ElementaryTypeName","src":"1901:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}}},"visibility":"public"},{"id":304,"nodeType":"VariableDeclaration","src":"2060:25:3","nodes":[],"constant":false,"functionSelector":"a9fc3d4f","mutability":"mutable","name":"callSiteCount","nameLocation":"2072:13:3","scope":1751,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":303,"name":"uint","nodeType":"ElementaryTypeName","src":"2060:4:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"id":308,"nodeType":"VariableDeclaration","src":"2155:59:3","nodes":[],"constant":false,"functionSelector":"a4c1cccb","mutability":"mutable","name":"allowedAssets","nameLocation":"2201:13:3","scope":1751,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"typeName":{"id":307,"keyName":"token","keyNameLocation":"2171:5:3","keyType":{"id":305,"name":"address","nodeType":"ElementaryTypeName","src":"2163:7:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"2155:38:3","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"valueName":"allowed","valueNameLocation":"2185:7:3","valueType":{"id":306,"name":"bool","nodeType":"ElementaryTypeName","src":"2180:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}},"visibility":"public"},{"id":312,"nodeType":"VariableDeclaration","src":"2263:61:3","nodes":[],"constant":false,"functionSelector":"fadbcf48","mutability":"mutable","name":"allowedSenders","nameLocation":"2310:14:3","scope":1751,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"typeName":{"id":311,"keyName":"sender","keyNameLocation":"2279:6:3","keyType":{"id":309,"name":"address","nodeType":"ElementaryTypeName","src":"2271:7:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"2263:39:3","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"valueName":"allowed","valueNameLocation":"2294:7:3","valueType":{"id":310,"name":"bool","nodeType":"ElementaryTypeName","src":"2289:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}},"visibility":"public"},{"id":316,"nodeType":"VariableDeclaration","src":"2373:65:3","nodes":[],"constant":false,"functionSelector":"3cf20025","mutability":"mutable","name":"allowedReceivers","nameLocation":"2422:16:3","scope":1751,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"typeName":{"id":315,"keyName":"receiver","keyNameLocation":"2389:8:3","keyType":{"id":313,"name":"address","nodeType":"ElementaryTypeName","src":"2381:7:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"2373:41:3","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"valueName":"allowed","valueNameLocation":"2406:7:3","valueType":{"id":314,"name":"bool","nodeType":"ElementaryTypeName","src":"2401:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}},"visibility":"public"},{"id":320,"nodeType":"VariableDeclaration","src":"2467:79:3","nodes":[],"constant":false,"functionSelector":"07ef00cf","mutability":"mutable","name":"allowedWithdrawDestinations","nameLocation":"2519:27:3","scope":1751,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"typeName":{"id":319,"keyName":"destination","keyNameLocation":"2483:11:3","keyType":{"id":317,"name":"address","nodeType":"ElementaryTypeName","src":"2475:7:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"2467:44:3","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"valueName":"allowed","valueNameLocation":"2503:7:3","valueType":{"id":318,"name":"bool","nodeType":"ElementaryTypeName","src":"2498:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}},"visibility":"public"},{"id":324,"nodeType":"VariableDeclaration","src":"2576:79:3","nodes":[],"constant":false,"functionSelector":"eb0de042","mutability":"mutable","name":"allowedApprovalDestinations","nameLocation":"2628:27:3","scope":1751,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"typeName":{"id":323,"keyName":"destination","keyNameLocation":"2592:11:3","keyType":{"id":321,"name":"address","nodeType":"ElementaryTypeName","src":"2584:7:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"2576:44:3","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"valueName":"allowed","valueNameLocation":"2612:7:3","valueType":{"id":322,"name":"bool","nodeType":"ElementaryTypeName","src":"2607:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}},"visibility":"public"},{"id":328,"nodeType":"VariableDeclaration","src":"2685:89:3","nodes":[],"constant":false,"functionSelector":"4b941268","mutability":"mutable","name":"allowedDelegationApprovalDestinations","nameLocation":"2737:37:3","scope":1751,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"typeName":{"id":327,"keyName":"destination","keyNameLocation":"2701:11:3","keyType":{"id":325,"name":"address","nodeType":"ElementaryTypeName","src":"2693:7:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"2685:44:3","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"valueName":"allowed","valueNameLocation":"2721:7:3","valueType":{"id":326,"name":"bool","nodeType":"ElementaryTypeName","src":"2716:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}},"visibility":"public"},{"id":336,"nodeType":"EventDefinition","src":"2781:70:3","nodes":[],"anonymous":false,"eventSelector":"ef729aaa41b9fd994f9ff7c1960df214a84f722002e6cfbea31799cd0873a3ef","name":"CallSiteApproved","nameLocation":"2787:16:3","parameters":{"id":335,"nodeType":"ParameterList","parameters":[{"constant":false,"id":330,"indexed":false,"mutability":"mutable","name":"target","nameLocation":"2812:6:3","nodeType":"VariableDeclaration","scope":336,"src":"2804:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":329,"name":"address","nodeType":"ElementaryTypeName","src":"2804:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":332,"indexed":false,"mutability":"mutable","name":"selector","nameLocation":"2827:8:3","nodeType":"VariableDeclaration","scope":336,"src":"2820:15:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":331,"name":"bytes4","nodeType":"ElementaryTypeName","src":"2820:6:3","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"},{"constant":false,"id":334,"indexed":false,"mutability":"mutable","name":"notes","nameLocation":"2844:5:3","nodeType":"VariableDeclaration","scope":336,"src":"2837:12:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":333,"name":"string","nodeType":"ElementaryTypeName","src":"2837:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2803:47:3"}},{"id":344,"nodeType":"EventDefinition","src":"2856:69:3","nodes":[],"anonymous":false,"eventSelector":"37ea10f2d08f5a9803dfcd5abf3cfc7b0d6fcdf5fcbc36be9ea5a0b53d9a4d9b","name":"CallSiteRemoved","nameLocation":"2862:15:3","parameters":{"id":343,"nodeType":"ParameterList","parameters":[{"constant":false,"id":338,"indexed":false,"mutability":"mutable","name":"target","nameLocation":"2886:6:3","nodeType":"VariableDeclaration","scope":344,"src":"2878:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":337,"name":"address","nodeType":"ElementaryTypeName","src":"2878:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":340,"indexed":false,"mutability":"mutable","name":"selector","nameLocation":"2901:8:3","nodeType":"VariableDeclaration","scope":344,"src":"2894:15:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":339,"name":"bytes4","nodeType":"ElementaryTypeName","src":"2894:6:3","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"},{"constant":false,"id":342,"indexed":false,"mutability":"mutable","name":"notes","nameLocation":"2918:5:3","nodeType":"VariableDeclaration","scope":344,"src":"2911:12:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":341,"name":"string","nodeType":"ElementaryTypeName","src":"2911:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2877:47:3"}},{"id":350,"nodeType":"EventDefinition","src":"2931:51:3","nodes":[],"anonymous":false,"eventSelector":"a8f9caaf4861720900294428e4ff34d37070c37afd26d96e6e4da75326d2c3ad","name":"SenderApproved","nameLocation":"2937:14:3","parameters":{"id":349,"nodeType":"ParameterList","parameters":[{"constant":false,"id":346,"indexed":false,"mutability":"mutable","name":"sender","nameLocation":"2960:6:3","nodeType":"VariableDeclaration","scope":350,"src":"2952:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":345,"name":"address","nodeType":"ElementaryTypeName","src":"2952:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":348,"indexed":false,"mutability":"mutable","name":"notes","nameLocation":"2975:5:3","nodeType":"VariableDeclaration","scope":350,"src":"2968:12:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":347,"name":"string","nodeType":"ElementaryTypeName","src":"2968:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2951:30:3"}},{"id":356,"nodeType":"EventDefinition","src":"2987:50:3","nodes":[],"anonymous":false,"eventSelector":"3097928509c53a2dab9500431201d82b0d756e8f890fd01f4ae6b33b45687ea4","name":"SenderRemoved","nameLocation":"2993:13:3","parameters":{"id":355,"nodeType":"ParameterList","parameters":[{"constant":false,"id":352,"indexed":false,"mutability":"mutable","name":"sender","nameLocation":"3015:6:3","nodeType":"VariableDeclaration","scope":356,"src":"3007:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":351,"name":"address","nodeType":"ElementaryTypeName","src":"3007:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":354,"indexed":false,"mutability":"mutable","name":"notes","nameLocation":"3030:5:3","nodeType":"VariableDeclaration","scope":356,"src":"3023:12:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":353,"name":"string","nodeType":"ElementaryTypeName","src":"3023:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3006:30:3"}},{"id":362,"nodeType":"EventDefinition","src":"3043:53:3","nodes":[],"anonymous":false,"eventSelector":"62dd88c5ecfa60713a657640ebec4de26fc1aefa4afdb24e6d15a124fce72779","name":"ReceiverApproved","nameLocation":"3049:16:3","parameters":{"id":361,"nodeType":"ParameterList","parameters":[{"constant":false,"id":358,"indexed":false,"mutability":"mutable","name":"sender","nameLocation":"3074:6:3","nodeType":"VariableDeclaration","scope":362,"src":"3066:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":357,"name":"address","nodeType":"ElementaryTypeName","src":"3066:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":360,"indexed":false,"mutability":"mutable","name":"notes","nameLocation":"3089:5:3","nodeType":"VariableDeclaration","scope":362,"src":"3082:12:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":359,"name":"string","nodeType":"ElementaryTypeName","src":"3082:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3065:30:3"}},{"id":368,"nodeType":"EventDefinition","src":"3101:52:3","nodes":[],"anonymous":false,"eventSelector":"4e13b11ab98e672bd78295ef9cebe764dc617f95decf47d842c25b83abc0c724","name":"ReceiverRemoved","nameLocation":"3107:15:3","parameters":{"id":367,"nodeType":"ParameterList","parameters":[{"constant":false,"id":364,"indexed":false,"mutability":"mutable","name":"sender","nameLocation":"3131:6:3","nodeType":"VariableDeclaration","scope":368,"src":"3123:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":363,"name":"address","nodeType":"ElementaryTypeName","src":"3123:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":366,"indexed":false,"mutability":"mutable","name":"notes","nameLocation":"3146:5:3","nodeType":"VariableDeclaration","scope":368,"src":"3139:12:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":365,"name":"string","nodeType":"ElementaryTypeName","src":"3139:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3122:30:3"}},{"id":374,"nodeType":"EventDefinition","src":"3159:64:3","nodes":[],"anonymous":false,"eventSelector":"3562181221a42a19ddd03a82dfe06acab1905ceb65cdaf7d86a1d9fec6643552","name":"WithdrawDestinationApproved","nameLocation":"3165:27:3","parameters":{"id":373,"nodeType":"ParameterList","parameters":[{"constant":false,"id":370,"indexed":false,"mutability":"mutable","name":"sender","nameLocation":"3201:6:3","nodeType":"VariableDeclaration","scope":374,"src":"3193:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":369,"name":"address","nodeType":"ElementaryTypeName","src":"3193:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":372,"indexed":false,"mutability":"mutable","name":"notes","nameLocation":"3216:5:3","nodeType":"VariableDeclaration","scope":374,"src":"3209:12:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":371,"name":"string","nodeType":"ElementaryTypeName","src":"3209:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3192:30:3"}},{"id":380,"nodeType":"EventDefinition","src":"3228:63:3","nodes":[],"anonymous":false,"eventSelector":"1212f8ddb39de8e1a339460c95752d61100723efeaa34ccd94bca94393f40938","name":"WithdrawDestinationRemoved","nameLocation":"3234:26:3","parameters":{"id":379,"nodeType":"ParameterList","parameters":[{"constant":false,"id":376,"indexed":false,"mutability":"mutable","name":"sender","nameLocation":"3269:6:3","nodeType":"VariableDeclaration","scope":380,"src":"3261:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":375,"name":"address","nodeType":"ElementaryTypeName","src":"3261:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":378,"indexed":false,"mutability":"mutable","name":"notes","nameLocation":"3284:5:3","nodeType":"VariableDeclaration","scope":380,"src":"3277:12:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":377,"name":"string","nodeType":"ElementaryTypeName","src":"3277:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3260:30:3"}},{"id":386,"nodeType":"EventDefinition","src":"3297:64:3","nodes":[],"anonymous":false,"eventSelector":"628a44970c0e450415e3ae74334ea44f3307b74dbf677a1371190242bf2f3589","name":"ApprovalDestinationApproved","nameLocation":"3303:27:3","parameters":{"id":385,"nodeType":"ParameterList","parameters":[{"constant":false,"id":382,"indexed":false,"mutability":"mutable","name":"sender","nameLocation":"3339:6:3","nodeType":"VariableDeclaration","scope":386,"src":"3331:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":381,"name":"address","nodeType":"ElementaryTypeName","src":"3331:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":384,"indexed":false,"mutability":"mutable","name":"notes","nameLocation":"3354:5:3","nodeType":"VariableDeclaration","scope":386,"src":"3347:12:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":383,"name":"string","nodeType":"ElementaryTypeName","src":"3347:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3330:30:3"}},{"id":392,"nodeType":"EventDefinition","src":"3366:63:3","nodes":[],"anonymous":false,"eventSelector":"b71be9befd3ac90c1c9981d3b1161b3c2c6dcd741f13b34061aa251226a802df","name":"ApprovalDestinationRemoved","nameLocation":"3372:26:3","parameters":{"id":391,"nodeType":"ParameterList","parameters":[{"constant":false,"id":388,"indexed":false,"mutability":"mutable","name":"sender","nameLocation":"3407:6:3","nodeType":"VariableDeclaration","scope":392,"src":"3399:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":387,"name":"address","nodeType":"ElementaryTypeName","src":"3399:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":390,"indexed":false,"mutability":"mutable","name":"notes","nameLocation":"3422:5:3","nodeType":"VariableDeclaration","scope":392,"src":"3415:12:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":389,"name":"string","nodeType":"ElementaryTypeName","src":"3415:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3398:30:3"}},{"id":398,"nodeType":"EventDefinition","src":"3435:74:3","nodes":[],"anonymous":false,"eventSelector":"b71b62345f0de74ec86ca2292697c77744d05ce6534f9b8866cefdf5fa3152b2","name":"DelegationApprovalDestinationApproved","nameLocation":"3441:37:3","parameters":{"id":397,"nodeType":"ParameterList","parameters":[{"constant":false,"id":394,"indexed":false,"mutability":"mutable","name":"sender","nameLocation":"3487:6:3","nodeType":"VariableDeclaration","scope":398,"src":"3479:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":393,"name":"address","nodeType":"ElementaryTypeName","src":"3479:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":396,"indexed":false,"mutability":"mutable","name":"notes","nameLocation":"3502:5:3","nodeType":"VariableDeclaration","scope":398,"src":"3495:12:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":395,"name":"string","nodeType":"ElementaryTypeName","src":"3495:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3478:30:3"}},{"id":404,"nodeType":"EventDefinition","src":"3514:73:3","nodes":[],"anonymous":false,"eventSelector":"f9a414ea26a64e12a2abdb23706ec196a42adeb564668fb73f46555fbd2336c2","name":"DelegationApprovalDestinationRemoved","nameLocation":"3520:36:3","parameters":{"id":403,"nodeType":"ParameterList","parameters":[{"constant":false,"id":400,"indexed":false,"mutability":"mutable","name":"sender","nameLocation":"3565:6:3","nodeType":"VariableDeclaration","scope":404,"src":"3557:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":399,"name":"address","nodeType":"ElementaryTypeName","src":"3557:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":402,"indexed":false,"mutability":"mutable","name":"notes","nameLocation":"3580:5:3","nodeType":"VariableDeclaration","scope":404,"src":"3573:12:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":401,"name":"string","nodeType":"ElementaryTypeName","src":"3573:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3556:30:3"}},{"id":410,"nodeType":"EventDefinition","src":"3593:50:3","nodes":[],"anonymous":false,"eventSelector":"ad90e2570fc4fe9f7437be3188d5c791c6662892d31731992aa88f5c87621983","name":"AssetApproved","nameLocation":"3599:13:3","parameters":{"id":409,"nodeType":"ParameterList","parameters":[{"constant":false,"id":406,"indexed":false,"mutability":"mutable","name":"sender","nameLocation":"3621:6:3","nodeType":"VariableDeclaration","scope":410,"src":"3613:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":405,"name":"address","nodeType":"ElementaryTypeName","src":"3613:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":408,"indexed":false,"mutability":"mutable","name":"notes","nameLocation":"3636:5:3","nodeType":"VariableDeclaration","scope":410,"src":"3629:12:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":407,"name":"string","nodeType":"ElementaryTypeName","src":"3629:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3612:30:3"}},{"id":416,"nodeType":"EventDefinition","src":"3648:49:3","nodes":[],"anonymous":false,"eventSelector":"9ca3f065622f5f03f32b7157677a0e420c3a36ab45fd49f256ffebce3e310587","name":"AssetRemoved","nameLocation":"3654:12:3","parameters":{"id":415,"nodeType":"ParameterList","parameters":[{"constant":false,"id":412,"indexed":false,"mutability":"mutable","name":"sender","nameLocation":"3675:6:3","nodeType":"VariableDeclaration","scope":416,"src":"3667:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":411,"name":"address","nodeType":"ElementaryTypeName","src":"3667:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":414,"indexed":false,"mutability":"mutable","name":"notes","nameLocation":"3690:5:3","nodeType":"VariableDeclaration","scope":416,"src":"3683:12:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":413,"name":"string","nodeType":"ElementaryTypeName","src":"3683:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3666:30:3"}},{"id":422,"nodeType":"FunctionDefinition","src":"3703:31:3","nodes":[],"body":{"id":421,"nodeType":"Block","src":"3727:7:3","nodes":[],"statements":[]},"implemented":true,"kind":"constructor","modifiers":[{"arguments":[],"id":419,"kind":"baseConstructorSpecifier","modifierName":{"id":418,"name":"Ownable","nameLocations":["3717:7:3"],"nodeType":"IdentifierPath","referencedDeclaration":112,"src":"3717:7:3"},"nodeType":"ModifierInvocation","src":"3717:9:3"}],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":417,"nodeType":"ParameterList","parameters":[],"src":"3714:2:3"},"returnParameters":{"id":420,"nodeType":"ParameterList","parameters":[],"src":"3727:0:3"},"scope":1751,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":440,"nodeType":"FunctionDefinition","src":"3740:190:3","nodes":[],"body":{"id":439,"nodeType":"Block","src":"3813:117:3","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"id":434,"name":"_func","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":424,"src":"3915:5:3","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":433,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3909:5:3","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":432,"name":"bytes","nodeType":"ElementaryTypeName","src":"3909:5:3","typeDescriptions":{}}},"id":435,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3909:12:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":431,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"3899:9:3","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":436,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3899:23:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":430,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3892:6:3","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes4_$","typeString":"type(bytes4)"},"typeName":{"id":429,"name":"bytes4","nodeType":"ElementaryTypeName","src":"3892:6:3","typeDescriptions":{}}},"id":437,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3892:31:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"functionReturnParameters":428,"id":438,"nodeType":"Return","src":"3885:38:3"}]},"implemented":true,"kind":"function","modifiers":[],"name":"getSelector","nameLocation":"3749:11:3","parameters":{"id":425,"nodeType":"ParameterList","parameters":[{"constant":false,"id":424,"mutability":"mutable","name":"_func","nameLocation":"3775:5:3","nodeType":"VariableDeclaration","scope":440,"src":"3761:19:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":423,"name":"string","nodeType":"ElementaryTypeName","src":"3761:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3760:21:3"},"returnParameters":{"id":428,"nodeType":"ParameterList","parameters":[{"constant":false,"id":427,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":440,"src":"3805:6:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":426,"name":"bytes4","nodeType":"ElementaryTypeName","src":"3805:6:3","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"3804:8:3"},"scope":1751,"stateMutability":"pure","virtual":false,"visibility":"internal"},{"id":450,"nodeType":"FunctionDefinition","src":"3992:93:3","nodes":[],"body":{"id":449,"nodeType":"Block","src":"4054:31:3","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":446,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40,"src":"4071:5:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":447,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4071:7:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":445,"id":448,"nodeType":"Return","src":"4064:14:3"}]},"documentation":{"id":441,"nodeType":"StructuredDocumentation","src":"3936:51:3","text":" Get the address of the proto DAO"},"functionSelector":"73252494","implemented":true,"kind":"function","modifiers":[],"name":"getGovernanceAddress","nameLocation":"4001:20:3","parameters":{"id":442,"nodeType":"ParameterList","parameters":[],"src":"4021:2:3"},"returnParameters":{"id":445,"nodeType":"ParameterList","parameters":[{"constant":false,"id":444,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":450,"src":"4045:7:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":443,"name":"address","nodeType":"ElementaryTypeName","src":"4045:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4044:9:3"},"scope":1751,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":459,"nodeType":"FunctionDefinition","src":"4212:83:3","nodes":[],"body":{"id":458,"nodeType":"Block","src":"4270:25:3","nodes":[],"statements":[{"expression":{"hexValue":"31","id":456,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4287:1:3","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"functionReturnParameters":455,"id":457,"nodeType":"Return","src":"4280:8:3"}]},"documentation":{"id":451,"nodeType":"StructuredDocumentation","src":"4091:116:3","text":" Track version during internal development.\n We bump up when new whitelistings added."},"functionSelector":"fdedfa27","implemented":true,"kind":"function","modifiers":[],"name":"getInternalVersion","nameLocation":"4221:18:3","parameters":{"id":452,"nodeType":"ParameterList","parameters":[],"src":"4239:2:3"},"returnParameters":{"id":455,"nodeType":"ParameterList","parameters":[{"constant":false,"id":454,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":459,"src":"4263:5:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":453,"name":"uint8","nodeType":"ElementaryTypeName","src":"4263:5:3","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"4262:7:3"},"scope":1751,"stateMutability":"pure","virtual":false,"visibility":"public"},{"id":488,"nodeType":"FunctionDefinition","src":"4301:235:3","nodes":[],"body":{"id":487,"nodeType":"Block","src":"4397:139:3","nodes":[],"statements":[{"expression":{"id":476,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":470,"name":"allowedCallSites","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":302,"src":"4407:16:3","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_bytes4_$_t_bool_$_$","typeString":"mapping(address => mapping(bytes4 => bool))"}},"id":473,"indexExpression":{"id":471,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":461,"src":"4424:6:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4407:24:3","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes4_$_t_bool_$","typeString":"mapping(bytes4 => bool)"}},"id":474,"indexExpression":{"id":472,"name":"selector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":463,"src":"4432:8:3","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4407:34:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":475,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4444:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"4407:41:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":477,"nodeType":"ExpressionStatement","src":"4407:41:3"},{"expression":{"id":479,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"4458:15:3","subExpression":{"id":478,"name":"callSiteCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":304,"src":"4458:13:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":480,"nodeType":"ExpressionStatement","src":"4458:15:3"},{"eventCall":{"arguments":[{"id":482,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":461,"src":"4505:6:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":483,"name":"selector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":463,"src":"4513:8:3","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":484,"name":"notes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":465,"src":"4523:5:3","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}],"id":481,"name":"CallSiteApproved","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":336,"src":"4488:16:3","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_bytes4_$_t_string_memory_ptr_$returns$__$","typeString":"function (address,bytes4,string memory)"}},"id":485,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4488:41:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":486,"nodeType":"EmitStatement","src":"4483:46:3"}]},"functionSelector":"5e4ccace","implemented":true,"kind":"function","modifiers":[{"id":468,"kind":"modifierInvocation","modifierName":{"id":467,"name":"onlyOwner","nameLocations":["4387:9:3"],"nodeType":"IdentifierPath","referencedDeclaration":31,"src":"4387:9:3"},"nodeType":"ModifierInvocation","src":"4387:9:3"}],"name":"allowCallSite","nameLocation":"4310:13:3","parameters":{"id":466,"nodeType":"ParameterList","parameters":[{"constant":false,"id":461,"mutability":"mutable","name":"target","nameLocation":"4332:6:3","nodeType":"VariableDeclaration","scope":488,"src":"4324:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":460,"name":"address","nodeType":"ElementaryTypeName","src":"4324:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":463,"mutability":"mutable","name":"selector","nameLocation":"4347:8:3","nodeType":"VariableDeclaration","scope":488,"src":"4340:15:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":462,"name":"bytes4","nodeType":"ElementaryTypeName","src":"4340:6:3","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"},{"constant":false,"id":465,"mutability":"mutable","name":"notes","nameLocation":"4373:5:3","nodeType":"VariableDeclaration","scope":488,"src":"4357:21:3","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":464,"name":"string","nodeType":"ElementaryTypeName","src":"4357:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"4323:56:3"},"returnParameters":{"id":469,"nodeType":"ParameterList","parameters":[],"src":"4397:0:3"},"scope":1751,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":513,"nodeType":"FunctionDefinition","src":"4542:210:3","nodes":[],"body":{"id":512,"nodeType":"Block","src":"4639:113:3","nodes":[],"statements":[{"expression":{"id":504,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"4649:41:3","subExpression":{"baseExpression":{"baseExpression":{"id":499,"name":"allowedCallSites","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":302,"src":"4656:16:3","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_bytes4_$_t_bool_$_$","typeString":"mapping(address => mapping(bytes4 => bool))"}},"id":501,"indexExpression":{"id":500,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":490,"src":"4673:6:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4656:24:3","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes4_$_t_bool_$","typeString":"mapping(bytes4 => bool)"}},"id":503,"indexExpression":{"id":502,"name":"selector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":492,"src":"4681:8:3","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4656:34:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":505,"nodeType":"ExpressionStatement","src":"4649:41:3"},{"eventCall":{"arguments":[{"id":507,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":490,"src":"4721:6:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":508,"name":"selector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":492,"src":"4729:8:3","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":509,"name":"notes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":494,"src":"4739:5:3","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}],"id":506,"name":"CallSiteRemoved","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":344,"src":"4705:15:3","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_bytes4_$_t_string_memory_ptr_$returns$__$","typeString":"function (address,bytes4,string memory)"}},"id":510,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4705:40:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":511,"nodeType":"EmitStatement","src":"4700:45:3"}]},"functionSelector":"d7334c9d","implemented":true,"kind":"function","modifiers":[{"id":497,"kind":"modifierInvocation","modifierName":{"id":496,"name":"onlyOwner","nameLocations":["4629:9:3"],"nodeType":"IdentifierPath","referencedDeclaration":31,"src":"4629:9:3"},"nodeType":"ModifierInvocation","src":"4629:9:3"}],"name":"removeCallSite","nameLocation":"4551:14:3","parameters":{"id":495,"nodeType":"ParameterList","parameters":[{"constant":false,"id":490,"mutability":"mutable","name":"target","nameLocation":"4574:6:3","nodeType":"VariableDeclaration","scope":513,"src":"4566:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":489,"name":"address","nodeType":"ElementaryTypeName","src":"4566:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":492,"mutability":"mutable","name":"selector","nameLocation":"4589:8:3","nodeType":"VariableDeclaration","scope":513,"src":"4582:15:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":491,"name":"bytes4","nodeType":"ElementaryTypeName","src":"4582:6:3","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"},{"constant":false,"id":494,"mutability":"mutable","name":"notes","nameLocation":"4615:5:3","nodeType":"VariableDeclaration","scope":513,"src":"4599:21:3","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":493,"name":"string","nodeType":"ElementaryTypeName","src":"4599:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"4565:56:3"},"returnParameters":{"id":498,"nodeType":"ParameterList","parameters":[],"src":"4639:0:3"},"scope":1751,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":534,"nodeType":"FunctionDefinition","src":"4758:167:3","nodes":[],"body":{"id":533,"nodeType":"Block","src":"4835:90:3","nodes":[],"statements":[{"expression":{"id":526,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":522,"name":"allowedSenders","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":312,"src":"4845:14:3","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":524,"indexExpression":{"id":523,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":515,"src":"4860:6:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4845:22:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":525,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4870:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"4845:29:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":527,"nodeType":"ExpressionStatement","src":"4845:29:3"},{"eventCall":{"arguments":[{"id":529,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":515,"src":"4904:6:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":530,"name":"notes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":517,"src":"4912:5:3","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}],"id":528,"name":"SenderApproved","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":350,"src":"4889:14:3","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$","typeString":"function (address,string memory)"}},"id":531,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4889:29:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":532,"nodeType":"EmitStatement","src":"4884:34:3"}]},"functionSelector":"fa2c59c8","implemented":true,"kind":"function","modifiers":[{"id":520,"kind":"modifierInvocation","modifierName":{"id":519,"name":"onlyOwner","nameLocations":["4825:9:3"],"nodeType":"IdentifierPath","referencedDeclaration":31,"src":"4825:9:3"},"nodeType":"ModifierInvocation","src":"4825:9:3"}],"name":"allowSender","nameLocation":"4767:11:3","parameters":{"id":518,"nodeType":"ParameterList","parameters":[{"constant":false,"id":515,"mutability":"mutable","name":"sender","nameLocation":"4787:6:3","nodeType":"VariableDeclaration","scope":534,"src":"4779:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":514,"name":"address","nodeType":"ElementaryTypeName","src":"4779:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":517,"mutability":"mutable","name":"notes","nameLocation":"4811:5:3","nodeType":"VariableDeclaration","scope":534,"src":"4795:21:3","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":516,"name":"string","nodeType":"ElementaryTypeName","src":"4795:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"4778:39:3"},"returnParameters":{"id":521,"nodeType":"ParameterList","parameters":[],"src":"4835:0:3"},"scope":1751,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":554,"nodeType":"FunctionDefinition","src":"4931:167:3","nodes":[],"body":{"id":553,"nodeType":"Block","src":"5009:89:3","nodes":[],"statements":[{"expression":{"id":546,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"5019:29:3","subExpression":{"baseExpression":{"id":543,"name":"allowedSenders","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":312,"src":"5026:14:3","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":545,"indexExpression":{"id":544,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":536,"src":"5041:6:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5026:22:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":547,"nodeType":"ExpressionStatement","src":"5019:29:3"},{"eventCall":{"arguments":[{"id":549,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":536,"src":"5077:6:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":550,"name":"notes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":538,"src":"5085:5:3","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}],"id":548,"name":"SenderRemoved","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":356,"src":"5063:13:3","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$","typeString":"function (address,string memory)"}},"id":551,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5063:28:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":552,"nodeType":"EmitStatement","src":"5058:33:3"}]},"functionSelector":"a67e1f54","implemented":true,"kind":"function","modifiers":[{"id":541,"kind":"modifierInvocation","modifierName":{"id":540,"name":"onlyOwner","nameLocations":["4999:9:3"],"nodeType":"IdentifierPath","referencedDeclaration":31,"src":"4999:9:3"},"nodeType":"ModifierInvocation","src":"4999:9:3"}],"name":"removeSender","nameLocation":"4940:12:3","parameters":{"id":539,"nodeType":"ParameterList","parameters":[{"constant":false,"id":536,"mutability":"mutable","name":"sender","nameLocation":"4961:6:3","nodeType":"VariableDeclaration","scope":554,"src":"4953:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":535,"name":"address","nodeType":"ElementaryTypeName","src":"4953:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":538,"mutability":"mutable","name":"notes","nameLocation":"4985:5:3","nodeType":"VariableDeclaration","scope":554,"src":"4969:21:3","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":537,"name":"string","nodeType":"ElementaryTypeName","src":"4969:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"4952:39:3"},"returnParameters":{"id":542,"nodeType":"ParameterList","parameters":[],"src":"5009:0:3"},"scope":1751,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":575,"nodeType":"FunctionDefinition","src":"5104:179:3","nodes":[],"body":{"id":574,"nodeType":"Block","src":"5185:98:3","nodes":[],"statements":[{"expression":{"id":567,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":563,"name":"allowedReceivers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":316,"src":"5195:16:3","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":565,"indexExpression":{"id":564,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":556,"src":"5212:8:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5195:26:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":566,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5224:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"5195:33:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":568,"nodeType":"ExpressionStatement","src":"5195:33:3"},{"eventCall":{"arguments":[{"id":570,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":556,"src":"5260:8:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":571,"name":"notes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":558,"src":"5270:5:3","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}],"id":569,"name":"ReceiverApproved","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":362,"src":"5243:16:3","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$","typeString":"function (address,string memory)"}},"id":572,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5243:33:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":573,"nodeType":"EmitStatement","src":"5238:38:3"}]},"functionSelector":"72e548a9","implemented":true,"kind":"function","modifiers":[{"id":561,"kind":"modifierInvocation","modifierName":{"id":560,"name":"onlyOwner","nameLocations":["5175:9:3"],"nodeType":"IdentifierPath","referencedDeclaration":31,"src":"5175:9:3"},"nodeType":"ModifierInvocation","src":"5175:9:3"}],"name":"allowReceiver","nameLocation":"5113:13:3","parameters":{"id":559,"nodeType":"ParameterList","parameters":[{"constant":false,"id":556,"mutability":"mutable","name":"receiver","nameLocation":"5135:8:3","nodeType":"VariableDeclaration","scope":575,"src":"5127:16:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":555,"name":"address","nodeType":"ElementaryTypeName","src":"5127:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":558,"mutability":"mutable","name":"notes","nameLocation":"5161:5:3","nodeType":"VariableDeclaration","scope":575,"src":"5145:21:3","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":557,"name":"string","nodeType":"ElementaryTypeName","src":"5145:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"5126:41:3"},"returnParameters":{"id":562,"nodeType":"ParameterList","parameters":[],"src":"5185:0:3"},"scope":1751,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":595,"nodeType":"FunctionDefinition","src":"5289:179:3","nodes":[],"body":{"id":594,"nodeType":"Block","src":"5371:97:3","nodes":[],"statements":[{"expression":{"id":587,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"5381:33:3","subExpression":{"baseExpression":{"id":584,"name":"allowedReceivers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":316,"src":"5388:16:3","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":586,"indexExpression":{"id":585,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":577,"src":"5405:8:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5388:26:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":588,"nodeType":"ExpressionStatement","src":"5381:33:3"},{"eventCall":{"arguments":[{"id":590,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":577,"src":"5445:8:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":591,"name":"notes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":579,"src":"5455:5:3","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}],"id":589,"name":"ReceiverRemoved","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":368,"src":"5429:15:3","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$","typeString":"function (address,string memory)"}},"id":592,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5429:32:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":593,"nodeType":"EmitStatement","src":"5424:37:3"}]},"functionSelector":"2d12d788","implemented":true,"kind":"function","modifiers":[{"id":582,"kind":"modifierInvocation","modifierName":{"id":581,"name":"onlyOwner","nameLocations":["5361:9:3"],"nodeType":"IdentifierPath","referencedDeclaration":31,"src":"5361:9:3"},"nodeType":"ModifierInvocation","src":"5361:9:3"}],"name":"removeReceiver","nameLocation":"5298:14:3","parameters":{"id":580,"nodeType":"ParameterList","parameters":[{"constant":false,"id":577,"mutability":"mutable","name":"receiver","nameLocation":"5321:8:3","nodeType":"VariableDeclaration","scope":595,"src":"5313:16:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":576,"name":"address","nodeType":"ElementaryTypeName","src":"5313:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":579,"mutability":"mutable","name":"notes","nameLocation":"5347:5:3","nodeType":"VariableDeclaration","scope":595,"src":"5331:21:3","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":578,"name":"string","nodeType":"ElementaryTypeName","src":"5331:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"5312:41:3"},"returnParameters":{"id":583,"nodeType":"ParameterList","parameters":[],"src":"5371:0:3"},"scope":1751,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":616,"nodeType":"FunctionDefinition","src":"5474:221:3","nodes":[],"body":{"id":615,"nodeType":"Block","src":"5569:126:3","nodes":[],"statements":[{"expression":{"id":608,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":604,"name":"allowedWithdrawDestinations","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":320,"src":"5579:27:3","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":606,"indexExpression":{"id":605,"name":"destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":597,"src":"5607:11:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5579:40:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":607,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5622:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"5579:47:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":609,"nodeType":"ExpressionStatement","src":"5579:47:3"},{"eventCall":{"arguments":[{"id":611,"name":"destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":597,"src":"5669:11:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":612,"name":"notes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":599,"src":"5682:5:3","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}],"id":610,"name":"WithdrawDestinationApproved","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":374,"src":"5641:27:3","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$","typeString":"function (address,string memory)"}},"id":613,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5641:47:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":614,"nodeType":"EmitStatement","src":"5636:52:3"}]},"functionSelector":"5ace1d92","implemented":true,"kind":"function","modifiers":[{"id":602,"kind":"modifierInvocation","modifierName":{"id":601,"name":"onlyOwner","nameLocations":["5559:9:3"],"nodeType":"IdentifierPath","referencedDeclaration":31,"src":"5559:9:3"},"nodeType":"ModifierInvocation","src":"5559:9:3"}],"name":"allowWithdrawDestination","nameLocation":"5483:24:3","parameters":{"id":600,"nodeType":"ParameterList","parameters":[{"constant":false,"id":597,"mutability":"mutable","name":"destination","nameLocation":"5516:11:3","nodeType":"VariableDeclaration","scope":616,"src":"5508:19:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":596,"name":"address","nodeType":"ElementaryTypeName","src":"5508:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":599,"mutability":"mutable","name":"notes","nameLocation":"5545:5:3","nodeType":"VariableDeclaration","scope":616,"src":"5529:21:3","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":598,"name":"string","nodeType":"ElementaryTypeName","src":"5529:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"5507:44:3"},"returnParameters":{"id":603,"nodeType":"ParameterList","parameters":[],"src":"5569:0:3"},"scope":1751,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":636,"nodeType":"FunctionDefinition","src":"5701:221:3","nodes":[],"body":{"id":635,"nodeType":"Block","src":"5797:125:3","nodes":[],"statements":[{"expression":{"id":628,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"5807:47:3","subExpression":{"baseExpression":{"id":625,"name":"allowedWithdrawDestinations","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":320,"src":"5814:27:3","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":627,"indexExpression":{"id":626,"name":"destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":618,"src":"5842:11:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5814:40:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":629,"nodeType":"ExpressionStatement","src":"5807:47:3"},{"eventCall":{"arguments":[{"id":631,"name":"destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":618,"src":"5896:11:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":632,"name":"notes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":620,"src":"5909:5:3","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}],"id":630,"name":"WithdrawDestinationRemoved","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":380,"src":"5869:26:3","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$","typeString":"function (address,string memory)"}},"id":633,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5869:46:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":634,"nodeType":"EmitStatement","src":"5864:51:3"}]},"functionSelector":"8c2fdf9e","implemented":true,"kind":"function","modifiers":[{"id":623,"kind":"modifierInvocation","modifierName":{"id":622,"name":"onlyOwner","nameLocations":["5787:9:3"],"nodeType":"IdentifierPath","referencedDeclaration":31,"src":"5787:9:3"},"nodeType":"ModifierInvocation","src":"5787:9:3"}],"name":"removeWithdrawDestination","nameLocation":"5710:25:3","parameters":{"id":621,"nodeType":"ParameterList","parameters":[{"constant":false,"id":618,"mutability":"mutable","name":"destination","nameLocation":"5744:11:3","nodeType":"VariableDeclaration","scope":636,"src":"5736:19:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":617,"name":"address","nodeType":"ElementaryTypeName","src":"5736:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":620,"mutability":"mutable","name":"notes","nameLocation":"5773:5:3","nodeType":"VariableDeclaration","scope":636,"src":"5757:21:3","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":619,"name":"string","nodeType":"ElementaryTypeName","src":"5757:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"5735:44:3"},"returnParameters":{"id":624,"nodeType":"ParameterList","parameters":[],"src":"5797:0:3"},"scope":1751,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":657,"nodeType":"FunctionDefinition","src":"5928:221:3","nodes":[],"body":{"id":656,"nodeType":"Block","src":"6023:126:3","nodes":[],"statements":[{"expression":{"id":649,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":645,"name":"allowedApprovalDestinations","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":324,"src":"6033:27:3","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":647,"indexExpression":{"id":646,"name":"destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":638,"src":"6061:11:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6033:40:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":648,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"6076:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"6033:47:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":650,"nodeType":"ExpressionStatement","src":"6033:47:3"},{"eventCall":{"arguments":[{"id":652,"name":"destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":638,"src":"6123:11:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":653,"name":"notes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":640,"src":"6136:5:3","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}],"id":651,"name":"ApprovalDestinationApproved","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":386,"src":"6095:27:3","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$","typeString":"function (address,string memory)"}},"id":654,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6095:47:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":655,"nodeType":"EmitStatement","src":"6090:52:3"}]},"functionSelector":"98b3cc39","implemented":true,"kind":"function","modifiers":[{"id":643,"kind":"modifierInvocation","modifierName":{"id":642,"name":"onlyOwner","nameLocations":["6013:9:3"],"nodeType":"IdentifierPath","referencedDeclaration":31,"src":"6013:9:3"},"nodeType":"ModifierInvocation","src":"6013:9:3"}],"name":"allowApprovalDestination","nameLocation":"5937:24:3","parameters":{"id":641,"nodeType":"ParameterList","parameters":[{"constant":false,"id":638,"mutability":"mutable","name":"destination","nameLocation":"5970:11:3","nodeType":"VariableDeclaration","scope":657,"src":"5962:19:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":637,"name":"address","nodeType":"ElementaryTypeName","src":"5962:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":640,"mutability":"mutable","name":"notes","nameLocation":"5999:5:3","nodeType":"VariableDeclaration","scope":657,"src":"5983:21:3","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":639,"name":"string","nodeType":"ElementaryTypeName","src":"5983:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"5961:44:3"},"returnParameters":{"id":644,"nodeType":"ParameterList","parameters":[],"src":"6023:0:3"},"scope":1751,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":677,"nodeType":"FunctionDefinition","src":"6155:221:3","nodes":[],"body":{"id":676,"nodeType":"Block","src":"6251:125:3","nodes":[],"statements":[{"expression":{"id":669,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"6261:47:3","subExpression":{"baseExpression":{"id":666,"name":"allowedApprovalDestinations","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":324,"src":"6268:27:3","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":668,"indexExpression":{"id":667,"name":"destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":659,"src":"6296:11:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6268:40:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":670,"nodeType":"ExpressionStatement","src":"6261:47:3"},{"eventCall":{"arguments":[{"id":672,"name":"destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":659,"src":"6350:11:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":673,"name":"notes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":661,"src":"6363:5:3","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}],"id":671,"name":"ApprovalDestinationRemoved","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":392,"src":"6323:26:3","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$","typeString":"function (address,string memory)"}},"id":674,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6323:46:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":675,"nodeType":"EmitStatement","src":"6318:51:3"}]},"functionSelector":"04a3ba25","implemented":true,"kind":"function","modifiers":[{"id":664,"kind":"modifierInvocation","modifierName":{"id":663,"name":"onlyOwner","nameLocations":["6241:9:3"],"nodeType":"IdentifierPath","referencedDeclaration":31,"src":"6241:9:3"},"nodeType":"ModifierInvocation","src":"6241:9:3"}],"name":"removeApprovalDestination","nameLocation":"6164:25:3","parameters":{"id":662,"nodeType":"ParameterList","parameters":[{"constant":false,"id":659,"mutability":"mutable","name":"destination","nameLocation":"6198:11:3","nodeType":"VariableDeclaration","scope":677,"src":"6190:19:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":658,"name":"address","nodeType":"ElementaryTypeName","src":"6190:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":661,"mutability":"mutable","name":"notes","nameLocation":"6227:5:3","nodeType":"VariableDeclaration","scope":677,"src":"6211:21:3","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":660,"name":"string","nodeType":"ElementaryTypeName","src":"6211:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"6189:44:3"},"returnParameters":{"id":665,"nodeType":"ParameterList","parameters":[],"src":"6251:0:3"},"scope":1751,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":698,"nodeType":"FunctionDefinition","src":"6382:241:3","nodes":[],"body":{"id":697,"nodeType":"Block","src":"6487:136:3","nodes":[],"statements":[{"expression":{"id":690,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":686,"name":"allowedDelegationApprovalDestinations","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":328,"src":"6497:37:3","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":688,"indexExpression":{"id":687,"name":"destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":679,"src":"6535:11:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6497:50:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":689,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"6550:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"6497:57:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":691,"nodeType":"ExpressionStatement","src":"6497:57:3"},{"eventCall":{"arguments":[{"id":693,"name":"destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":679,"src":"6597:11:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":694,"name":"notes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":681,"src":"6610:5:3","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}],"id":692,"name":"ApprovalDestinationApproved","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":386,"src":"6569:27:3","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$","typeString":"function (address,string memory)"}},"id":695,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6569:47:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":696,"nodeType":"EmitStatement","src":"6564:52:3"}]},"functionSelector":"63cc17f2","implemented":true,"kind":"function","modifiers":[{"id":684,"kind":"modifierInvocation","modifierName":{"id":683,"name":"onlyOwner","nameLocations":["6477:9:3"],"nodeType":"IdentifierPath","referencedDeclaration":31,"src":"6477:9:3"},"nodeType":"ModifierInvocation","src":"6477:9:3"}],"name":"allowDelegationApprovalDestination","nameLocation":"6391:34:3","parameters":{"id":682,"nodeType":"ParameterList","parameters":[{"constant":false,"id":679,"mutability":"mutable","name":"destination","nameLocation":"6434:11:3","nodeType":"VariableDeclaration","scope":698,"src":"6426:19:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":678,"name":"address","nodeType":"ElementaryTypeName","src":"6426:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":681,"mutability":"mutable","name":"notes","nameLocation":"6463:5:3","nodeType":"VariableDeclaration","scope":698,"src":"6447:21:3","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":680,"name":"string","nodeType":"ElementaryTypeName","src":"6447:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"6425:44:3"},"returnParameters":{"id":685,"nodeType":"ParameterList","parameters":[],"src":"6487:0:3"},"scope":1751,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":718,"nodeType":"FunctionDefinition","src":"6629:231:3","nodes":[],"body":{"id":717,"nodeType":"Block","src":"6735:125:3","nodes":[],"statements":[{"expression":{"id":710,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"6745:47:3","subExpression":{"baseExpression":{"id":707,"name":"allowedApprovalDestinations","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":324,"src":"6752:27:3","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":709,"indexExpression":{"id":708,"name":"destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":700,"src":"6780:11:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6752:40:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":711,"nodeType":"ExpressionStatement","src":"6745:47:3"},{"eventCall":{"arguments":[{"id":713,"name":"destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":700,"src":"6834:11:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":714,"name":"notes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":702,"src":"6847:5:3","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}],"id":712,"name":"ApprovalDestinationRemoved","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":392,"src":"6807:26:3","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$","typeString":"function (address,string memory)"}},"id":715,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6807:46:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":716,"nodeType":"EmitStatement","src":"6802:51:3"}]},"functionSelector":"f259a073","implemented":true,"kind":"function","modifiers":[{"id":705,"kind":"modifierInvocation","modifierName":{"id":704,"name":"onlyOwner","nameLocations":["6725:9:3"],"nodeType":"IdentifierPath","referencedDeclaration":31,"src":"6725:9:3"},"nodeType":"ModifierInvocation","src":"6725:9:3"}],"name":"removeDelegationApprovalDestination","nameLocation":"6638:35:3","parameters":{"id":703,"nodeType":"ParameterList","parameters":[{"constant":false,"id":700,"mutability":"mutable","name":"destination","nameLocation":"6682:11:3","nodeType":"VariableDeclaration","scope":718,"src":"6674:19:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":699,"name":"address","nodeType":"ElementaryTypeName","src":"6674:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":702,"mutability":"mutable","name":"notes","nameLocation":"6711:5:3","nodeType":"VariableDeclaration","scope":718,"src":"6695:21:3","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":701,"name":"string","nodeType":"ElementaryTypeName","src":"6695:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"6673:44:3"},"returnParameters":{"id":706,"nodeType":"ParameterList","parameters":[],"src":"6735:0:3"},"scope":1751,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":739,"nodeType":"FunctionDefinition","src":"6866:161:3","nodes":[],"body":{"id":738,"nodeType":"Block","src":"6941:86:3","nodes":[],"statements":[{"expression":{"id":731,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":727,"name":"allowedAssets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":308,"src":"6951:13:3","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":729,"indexExpression":{"id":728,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":720,"src":"6965:5:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6951:20:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":730,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"6974:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"6951:27:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":732,"nodeType":"ExpressionStatement","src":"6951:27:3"},{"eventCall":{"arguments":[{"id":734,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":720,"src":"7007:5:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":735,"name":"notes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":722,"src":"7014:5:3","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}],"id":733,"name":"AssetApproved","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":410,"src":"6993:13:3","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$","typeString":"function (address,string memory)"}},"id":736,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6993:27:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":737,"nodeType":"EmitStatement","src":"6988:32:3"}]},"functionSelector":"86b6dbe5","implemented":true,"kind":"function","modifiers":[{"id":725,"kind":"modifierInvocation","modifierName":{"id":724,"name":"onlyOwner","nameLocations":["6931:9:3"],"nodeType":"IdentifierPath","referencedDeclaration":31,"src":"6931:9:3"},"nodeType":"ModifierInvocation","src":"6931:9:3"}],"name":"allowAsset","nameLocation":"6875:10:3","parameters":{"id":723,"nodeType":"ParameterList","parameters":[{"constant":false,"id":720,"mutability":"mutable","name":"asset","nameLocation":"6894:5:3","nodeType":"VariableDeclaration","scope":739,"src":"6886:13:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":719,"name":"address","nodeType":"ElementaryTypeName","src":"6886:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":722,"mutability":"mutable","name":"notes","nameLocation":"6917:5:3","nodeType":"VariableDeclaration","scope":739,"src":"6901:21:3","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":721,"name":"string","nodeType":"ElementaryTypeName","src":"6901:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"6885:38:3"},"returnParameters":{"id":726,"nodeType":"ParameterList","parameters":[],"src":"6941:0:3"},"scope":1751,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":759,"nodeType":"FunctionDefinition","src":"7033:161:3","nodes":[],"body":{"id":758,"nodeType":"Block","src":"7109:85:3","nodes":[],"statements":[{"expression":{"id":751,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"7119:27:3","subExpression":{"baseExpression":{"id":748,"name":"allowedAssets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":308,"src":"7126:13:3","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":750,"indexExpression":{"id":749,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":741,"src":"7140:5:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7126:20:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":752,"nodeType":"ExpressionStatement","src":"7119:27:3"},{"eventCall":{"arguments":[{"id":754,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":741,"src":"7174:5:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":755,"name":"notes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":743,"src":"7181:5:3","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}],"id":753,"name":"AssetRemoved","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":416,"src":"7161:12:3","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$","typeString":"function (address,string memory)"}},"id":756,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7161:26:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":757,"nodeType":"EmitStatement","src":"7156:31:3"}]},"functionSelector":"f901dc33","implemented":true,"kind":"function","modifiers":[{"id":746,"kind":"modifierInvocation","modifierName":{"id":745,"name":"onlyOwner","nameLocations":["7099:9:3"],"nodeType":"IdentifierPath","referencedDeclaration":31,"src":"7099:9:3"},"nodeType":"ModifierInvocation","src":"7099:9:3"}],"name":"removeAsset","nameLocation":"7042:11:3","parameters":{"id":744,"nodeType":"ParameterList","parameters":[{"constant":false,"id":741,"mutability":"mutable","name":"asset","nameLocation":"7062:5:3","nodeType":"VariableDeclaration","scope":759,"src":"7054:13:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":740,"name":"address","nodeType":"ElementaryTypeName","src":"7054:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":743,"mutability":"mutable","name":"notes","nameLocation":"7085:5:3","nodeType":"VariableDeclaration","scope":759,"src":"7069:21:3","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":742,"name":"string","nodeType":"ElementaryTypeName","src":"7069:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"7053:38:3"},"returnParameters":{"id":747,"nodeType":"ParameterList","parameters":[],"src":"7109:0:3"},"scope":1751,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":775,"nodeType":"FunctionDefinition","src":"7257:145:3","nodes":[],"body":{"id":774,"nodeType":"Block","src":"7344:58:3","nodes":[],"statements":[{"expression":{"baseExpression":{"baseExpression":{"id":768,"name":"allowedCallSites","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":302,"src":"7361:16:3","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_bytes4_$_t_bool_$_$","typeString":"mapping(address => mapping(bytes4 => bool))"}},"id":770,"indexExpression":{"id":769,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":761,"src":"7378:6:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7361:24:3","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes4_$_t_bool_$","typeString":"mapping(bytes4 => bool)"}},"id":772,"indexExpression":{"id":771,"name":"selector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":763,"src":"7386:8:3","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7361:34:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":767,"id":773,"nodeType":"Return","src":"7354:41:3"}]},"functionSelector":"713ebf3b","implemented":true,"kind":"function","modifiers":[],"name":"isAllowedCallSite","nameLocation":"7266:17:3","parameters":{"id":764,"nodeType":"ParameterList","parameters":[{"constant":false,"id":761,"mutability":"mutable","name":"target","nameLocation":"7292:6:3","nodeType":"VariableDeclaration","scope":775,"src":"7284:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":760,"name":"address","nodeType":"ElementaryTypeName","src":"7284:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":763,"mutability":"mutable","name":"selector","nameLocation":"7307:8:3","nodeType":"VariableDeclaration","scope":775,"src":"7300:15:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":762,"name":"bytes4","nodeType":"ElementaryTypeName","src":"7300:6:3","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"7283:33:3"},"returnParameters":{"id":767,"nodeType":"ParameterList","parameters":[{"constant":false,"id":766,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":775,"src":"7338:4:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":765,"name":"bool","nodeType":"ElementaryTypeName","src":"7338:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7337:6:3"},"scope":1751,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":789,"nodeType":"FunctionDefinition","src":"7408:122:3","nodes":[],"body":{"id":788,"nodeType":"Block","src":"7476:54:3","nodes":[],"statements":[{"expression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":786,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":782,"name":"allowedSenders","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":312,"src":"7493:14:3","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":784,"indexExpression":{"id":783,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":777,"src":"7508:6:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7493:22:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"74727565","id":785,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"7519:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"7493:30:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":781,"id":787,"nodeType":"Return","src":"7486:37:3"}]},"functionSelector":"be8c97b0","implemented":true,"kind":"function","modifiers":[],"name":"isAllowedSender","nameLocation":"7417:15:3","parameters":{"id":778,"nodeType":"ParameterList","parameters":[{"constant":false,"id":777,"mutability":"mutable","name":"sender","nameLocation":"7441:6:3","nodeType":"VariableDeclaration","scope":789,"src":"7433:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":776,"name":"address","nodeType":"ElementaryTypeName","src":"7433:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7432:16:3"},"returnParameters":{"id":781,"nodeType":"ParameterList","parameters":[{"constant":false,"id":780,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":789,"src":"7470:4:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":779,"name":"bool","nodeType":"ElementaryTypeName","src":"7470:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7469:6:3"},"scope":1751,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":803,"nodeType":"FunctionDefinition","src":"7588:130:3","nodes":[],"body":{"id":802,"nodeType":"Block","src":"7660:58:3","nodes":[],"statements":[{"expression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":800,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":796,"name":"allowedReceivers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":316,"src":"7677:16:3","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":798,"indexExpression":{"id":797,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":791,"src":"7694:8:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7677:26:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"74727565","id":799,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"7707:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"7677:34:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":795,"id":801,"nodeType":"Return","src":"7670:41:3"}]},"functionSelector":"d075f9bb","implemented":true,"kind":"function","modifiers":[],"name":"isAllowedReceiver","nameLocation":"7597:17:3","parameters":{"id":792,"nodeType":"ParameterList","parameters":[{"constant":false,"id":791,"mutability":"mutable","name":"receiver","nameLocation":"7623:8:3","nodeType":"VariableDeclaration","scope":803,"src":"7615:16:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":790,"name":"address","nodeType":"ElementaryTypeName","src":"7615:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7614:18:3"},"returnParameters":{"id":795,"nodeType":"ParameterList","parameters":[{"constant":false,"id":794,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":803,"src":"7654:4:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":793,"name":"bool","nodeType":"ElementaryTypeName","src":"7654:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7653:6:3"},"scope":1751,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":817,"nodeType":"FunctionDefinition","src":"7724:152:3","nodes":[],"body":{"id":816,"nodeType":"Block","src":"7807:69:3","nodes":[],"statements":[{"expression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":814,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":810,"name":"allowedWithdrawDestinations","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":320,"src":"7824:27:3","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":812,"indexExpression":{"id":811,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":805,"src":"7852:8:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7824:37:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"74727565","id":813,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"7865:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"7824:45:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":809,"id":815,"nodeType":"Return","src":"7817:52:3"}]},"functionSelector":"efb47bff","implemented":true,"kind":"function","modifiers":[],"name":"isAllowedWithdrawDestination","nameLocation":"7733:28:3","parameters":{"id":806,"nodeType":"ParameterList","parameters":[{"constant":false,"id":805,"mutability":"mutable","name":"receiver","nameLocation":"7770:8:3","nodeType":"VariableDeclaration","scope":817,"src":"7762:16:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":804,"name":"address","nodeType":"ElementaryTypeName","src":"7762:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7761:18:3"},"returnParameters":{"id":809,"nodeType":"ParameterList","parameters":[{"constant":false,"id":808,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":817,"src":"7801:4:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":807,"name":"bool","nodeType":"ElementaryTypeName","src":"7801:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7800:6:3"},"scope":1751,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":831,"nodeType":"FunctionDefinition","src":"7882:152:3","nodes":[],"body":{"id":830,"nodeType":"Block","src":"7965:69:3","nodes":[],"statements":[{"expression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":828,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":824,"name":"allowedApprovalDestinations","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":324,"src":"7982:27:3","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":826,"indexExpression":{"id":825,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":819,"src":"8010:8:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7982:37:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"74727565","id":827,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"8023:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"7982:45:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":823,"id":829,"nodeType":"Return","src":"7975:52:3"}]},"functionSelector":"1d49039c","implemented":true,"kind":"function","modifiers":[],"name":"isAllowedApprovalDestination","nameLocation":"7891:28:3","parameters":{"id":820,"nodeType":"ParameterList","parameters":[{"constant":false,"id":819,"mutability":"mutable","name":"receiver","nameLocation":"7928:8:3","nodeType":"VariableDeclaration","scope":831,"src":"7920:16:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":818,"name":"address","nodeType":"ElementaryTypeName","src":"7920:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7919:18:3"},"returnParameters":{"id":823,"nodeType":"ParameterList","parameters":[{"constant":false,"id":822,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":831,"src":"7959:4:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":821,"name":"bool","nodeType":"ElementaryTypeName","src":"7959:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7958:6:3"},"scope":1751,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":845,"nodeType":"FunctionDefinition","src":"8040:172:3","nodes":[],"body":{"id":844,"nodeType":"Block","src":"8133:79:3","nodes":[],"statements":[{"expression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":842,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":838,"name":"allowedDelegationApprovalDestinations","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":328,"src":"8150:37:3","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":840,"indexExpression":{"id":839,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":833,"src":"8188:8:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8150:47:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"74727565","id":841,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"8201:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"8150:55:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":837,"id":843,"nodeType":"Return","src":"8143:62:3"}]},"functionSelector":"2dc32a61","implemented":true,"kind":"function","modifiers":[],"name":"isAllowedDelegationApprovalDestination","nameLocation":"8049:38:3","parameters":{"id":834,"nodeType":"ParameterList","parameters":[{"constant":false,"id":833,"mutability":"mutable","name":"receiver","nameLocation":"8096:8:3","nodeType":"VariableDeclaration","scope":845,"src":"8088:16:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":832,"name":"address","nodeType":"ElementaryTypeName","src":"8088:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8087:18:3"},"returnParameters":{"id":837,"nodeType":"ParameterList","parameters":[{"constant":false,"id":836,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":845,"src":"8127:4:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":835,"name":"bool","nodeType":"ElementaryTypeName","src":"8127:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8126:6:3"},"scope":1751,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":859,"nodeType":"FunctionDefinition","src":"8218:118:3","nodes":[],"body":{"id":858,"nodeType":"Block","src":"8284:52:3","nodes":[],"statements":[{"expression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":856,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":852,"name":"allowedAssets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":308,"src":"8301:13:3","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":854,"indexExpression":{"id":853,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":847,"src":"8315:5:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8301:20:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"74727565","id":855,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"8325:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"8301:28:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":851,"id":857,"nodeType":"Return","src":"8294:35:3"}]},"functionSelector":"c537bed0","implemented":true,"kind":"function","modifiers":[],"name":"isAllowedAsset","nameLocation":"8227:14:3","parameters":{"id":848,"nodeType":"ParameterList","parameters":[{"constant":false,"id":847,"mutability":"mutable","name":"token","nameLocation":"8250:5:3","nodeType":"VariableDeclaration","scope":859,"src":"8242:13:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":846,"name":"address","nodeType":"ElementaryTypeName","src":"8242:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8241:15:3"},"returnParameters":{"id":851,"nodeType":"ParameterList","parameters":[{"constant":false,"id":850,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":859,"src":"8278:4:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":849,"name":"bool","nodeType":"ElementaryTypeName","src":"8278:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8277:6:3"},"scope":1751,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":884,"nodeType":"FunctionDefinition","src":"8342:219:3","nodes":[],"body":{"id":883,"nodeType":"Block","src":"8404:157:3","nodes":[],"statements":[{"assignments":[865,null],"declarations":[{"constant":false,"id":865,"mutability":"mutable","name":"to","nameLocation":"8423:2:3","nodeType":"VariableDeclaration","scope":883,"src":"8415:10:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":864,"name":"address","nodeType":"ElementaryTypeName","src":"8415:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},null],"id":875,"initialValue":{"arguments":[{"id":868,"name":"callData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":861,"src":"8442:8:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":870,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8453:7:3","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":869,"name":"address","nodeType":"ElementaryTypeName","src":"8453:7:3","typeDescriptions":{}}},{"id":872,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8462:4:3","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":871,"name":"uint","nodeType":"ElementaryTypeName","src":"8462:4:3","typeDescriptions":{}}}],"id":873,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"8452:15:3","typeDescriptions":{"typeIdentifier":"t_tuple$_t_type$_t_address_$_$_t_type$_t_uint256_$_$","typeString":"tuple(type(address),type(uint256))"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_tuple$_t_type$_t_address_$_$_t_type$_t_uint256_$_$","typeString":"tuple(type(address),type(uint256))"}],"expression":{"id":866,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"8431:3:3","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":867,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8435:6:3","memberName":"decode","nodeType":"MemberAccess","src":"8431:10:3","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":874,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8431:37:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_payable_$_t_uint256_$","typeString":"tuple(address payable,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"8414:54:3"},{"expression":{"arguments":[{"arguments":[{"id":878,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":865,"src":"8515:2:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":877,"name":"isAllowedWithdrawDestination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":817,"src":"8486:28:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":879,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8486:32:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5265636569766572206164647265737320646f6573206e6f74206d61746368","id":880,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8520:33:3","typeDescriptions":{"typeIdentifier":"t_stringliteral_914992591b078845495b58c4516b430d9e17451e3f92fff3d4d5ee434bb6c65c","typeString":"literal_string \"Receiver address does not match\""},"value":"Receiver address does not match"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_914992591b078845495b58c4516b430d9e17451e3f92fff3d4d5ee434bb6c65c","typeString":"literal_string \"Receiver address does not match\""}],"id":876,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"8478:7:3","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":881,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8478:76:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":882,"nodeType":"ExpressionStatement","src":"8478:76:3"}]},"functionSelector":"1710a4f2","implemented":true,"kind":"function","modifiers":[],"name":"validate_transfer","nameLocation":"8351:17:3","parameters":{"id":862,"nodeType":"ParameterList","parameters":[{"constant":false,"id":861,"mutability":"mutable","name":"callData","nameLocation":"8382:8:3","nodeType":"VariableDeclaration","scope":884,"src":"8369:21:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":860,"name":"bytes","nodeType":"ElementaryTypeName","src":"8369:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"8368:23:3"},"returnParameters":{"id":863,"nodeType":"ParameterList","parameters":[],"src":"8404:0:3"},"scope":1751,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":909,"nodeType":"FunctionDefinition","src":"8567:217:3","nodes":[],"body":{"id":908,"nodeType":"Block","src":"8628:156:3","nodes":[],"statements":[{"assignments":[890,null],"declarations":[{"constant":false,"id":890,"mutability":"mutable","name":"to","nameLocation":"8647:2:3","nodeType":"VariableDeclaration","scope":908,"src":"8639:10:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":889,"name":"address","nodeType":"ElementaryTypeName","src":"8639:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},null],"id":900,"initialValue":{"arguments":[{"id":893,"name":"callData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":886,"src":"8666:8:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":895,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8677:7:3","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":894,"name":"address","nodeType":"ElementaryTypeName","src":"8677:7:3","typeDescriptions":{}}},{"id":897,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8686:4:3","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":896,"name":"uint","nodeType":"ElementaryTypeName","src":"8686:4:3","typeDescriptions":{}}}],"id":898,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"8676:15:3","typeDescriptions":{"typeIdentifier":"t_tuple$_t_type$_t_address_$_$_t_type$_t_uint256_$_$","typeString":"tuple(type(address),type(uint256))"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_tuple$_t_type$_t_address_$_$_t_type$_t_uint256_$_$","typeString":"tuple(type(address),type(uint256))"}],"expression":{"id":891,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"8655:3:3","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":892,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8659:6:3","memberName":"decode","nodeType":"MemberAccess","src":"8655:10:3","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":899,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8655:37:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_payable_$_t_uint256_$","typeString":"tuple(address payable,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"8638:54:3"},{"expression":{"arguments":[{"arguments":[{"id":903,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":890,"src":"8739:2:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":902,"name":"isAllowedApprovalDestination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":831,"src":"8710:28:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":904,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8710:32:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"417070726f7665206164647265737320646f6573206e6f74206d61746368","id":905,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8744:32:3","typeDescriptions":{"typeIdentifier":"t_stringliteral_061eead9c5c695b3a9b2aabb100af56c91e79777fd50ccec60d963333056a268","typeString":"literal_string \"Approve address does not match\""},"value":"Approve address does not match"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_061eead9c5c695b3a9b2aabb100af56c91e79777fd50ccec60d963333056a268","typeString":"literal_string \"Approve address does not match\""}],"id":901,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"8702:7:3","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":906,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8702:75:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":907,"nodeType":"ExpressionStatement","src":"8702:75:3"}]},"functionSelector":"4b956bd8","implemented":true,"kind":"function","modifiers":[],"name":"validate_approve","nameLocation":"8576:16:3","parameters":{"id":887,"nodeType":"ParameterList","parameters":[{"constant":false,"id":886,"mutability":"mutable","name":"callData","nameLocation":"8606:8:3","nodeType":"VariableDeclaration","scope":909,"src":"8593:21:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":885,"name":"bytes","nodeType":"ElementaryTypeName","src":"8593:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"8592:23:3"},"returnParameters":{"id":888,"nodeType":"ParameterList","parameters":[],"src":"8628:0:3"},"scope":1751,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":934,"nodeType":"FunctionDefinition","src":"8790:248:3","nodes":[],"body":{"id":933,"nodeType":"Block","src":"8861:177:3","nodes":[],"statements":[{"assignments":[915,null],"declarations":[{"constant":false,"id":915,"mutability":"mutable","name":"to","nameLocation":"8880:2:3","nodeType":"VariableDeclaration","scope":933,"src":"8872:10:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":914,"name":"address","nodeType":"ElementaryTypeName","src":"8872:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},null],"id":925,"initialValue":{"arguments":[{"id":918,"name":"callData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":911,"src":"8899:8:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":920,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8910:7:3","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":919,"name":"address","nodeType":"ElementaryTypeName","src":"8910:7:3","typeDescriptions":{}}},{"id":922,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8919:4:3","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":921,"name":"uint","nodeType":"ElementaryTypeName","src":"8919:4:3","typeDescriptions":{}}}],"id":923,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"8909:15:3","typeDescriptions":{"typeIdentifier":"t_tuple$_t_type$_t_address_$_$_t_type$_t_uint256_$_$","typeString":"tuple(type(address),type(uint256))"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_tuple$_t_type$_t_address_$_$_t_type$_t_uint256_$_$","typeString":"tuple(type(address),type(uint256))"}],"expression":{"id":916,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"8888:3:3","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":917,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8892:6:3","memberName":"decode","nodeType":"MemberAccess","src":"8888:10:3","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":924,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8888:37:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_payable_$_t_uint256_$","typeString":"tuple(address payable,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"8871:54:3"},{"expression":{"arguments":[{"arguments":[{"id":928,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":915,"src":"8982:2:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":927,"name":"isAllowedDelegationApprovalDestination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":845,"src":"8943:38:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":929,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8943:42:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"417070726f76652064656c65676174696f6e206164647265737320646f6573206e6f74206d61746368","id":930,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8987:43:3","typeDescriptions":{"typeIdentifier":"t_stringliteral_46957612342ace361d75a39e9f3c52d08f87fd72ff88f357bc9739b6a7c8f100","typeString":"literal_string \"Approve delegation address does not match\""},"value":"Approve delegation address does not match"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_46957612342ace361d75a39e9f3c52d08f87fd72ff88f357bc9739b6a7c8f100","typeString":"literal_string \"Approve delegation address does not match\""}],"id":926,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"8935:7:3","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":931,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8935:96:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":932,"nodeType":"ExpressionStatement","src":"8935:96:3"}]},"functionSelector":"957dc6c0","implemented":true,"kind":"function","modifiers":[],"name":"validate_approveDelegation","nameLocation":"8799:26:3","parameters":{"id":912,"nodeType":"ParameterList","parameters":[{"constant":false,"id":911,"mutability":"mutable","name":"callData","nameLocation":"8839:8:3","nodeType":"VariableDeclaration","scope":934,"src":"8826:21:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":910,"name":"bytes","nodeType":"ElementaryTypeName","src":"8826:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"8825:23:3"},"returnParameters":{"id":913,"nodeType":"ParameterList","parameters":[],"src":"8861:0:3"},"scope":1751,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":963,"nodeType":"FunctionDefinition","src":"9044:269:3","nodes":[],"body":{"id":962,"nodeType":"Block","src":"9115:198:3","nodes":[],"statements":[{"expression":{"arguments":[{"id":942,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":936,"src":"9139:5:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"7472616e7366657228616464726573732c75696e7432353629","id":944,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9158:27:3","typeDescriptions":{"typeIdentifier":"t_stringliteral_a9059cbb2ab09eb219583f4a59a5d0623ade346d962bcd4e46b11da047c9049b","typeString":"literal_string \"transfer(address,uint256)\""},"value":"transfer(address,uint256)"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_a9059cbb2ab09eb219583f4a59a5d0623ade346d962bcd4e46b11da047c9049b","typeString":"literal_string \"transfer(address,uint256)\""}],"id":943,"name":"getSelector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":440,"src":"9146:11:3","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes4_$","typeString":"function (string memory) pure returns (bytes4)"}},"id":945,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9146:40:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":946,"name":"notes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":938,"src":"9188:5:3","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}],"id":941,"name":"allowCallSite","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":488,"src":"9125:13:3","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes4_$_t_string_calldata_ptr_$returns$__$","typeString":"function (address,bytes4,string calldata)"}},"id":947,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9125:69:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":948,"nodeType":"ExpressionStatement","src":"9125:69:3"},{"expression":{"arguments":[{"id":950,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":936,"src":"9218:5:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"617070726f766528616464726573732c75696e7432353629","id":952,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9237:26:3","typeDescriptions":{"typeIdentifier":"t_stringliteral_095ea7b334ae44009aa867bfb386f5c3b4b443ac6f0ee573fa91c4608fbadfba","typeString":"literal_string \"approve(address,uint256)\""},"value":"approve(address,uint256)"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_095ea7b334ae44009aa867bfb386f5c3b4b443ac6f0ee573fa91c4608fbadfba","typeString":"literal_string \"approve(address,uint256)\""}],"id":951,"name":"getSelector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":440,"src":"9225:11:3","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes4_$","typeString":"function (string memory) pure returns (bytes4)"}},"id":953,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9225:39:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":954,"name":"notes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":938,"src":"9266:5:3","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}],"id":949,"name":"allowCallSite","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":488,"src":"9204:13:3","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes4_$_t_string_calldata_ptr_$returns$__$","typeString":"function (address,bytes4,string calldata)"}},"id":955,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9204:68:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":956,"nodeType":"ExpressionStatement","src":"9204:68:3"},{"expression":{"arguments":[{"id":958,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":936,"src":"9293:5:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":959,"name":"notes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":938,"src":"9300:5:3","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}],"id":957,"name":"allowAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":739,"src":"9282:10:3","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_string_calldata_ptr_$returns$__$","typeString":"function (address,string calldata)"}},"id":960,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9282:24:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":961,"nodeType":"ExpressionStatement","src":"9282:24:3"}]},"functionSelector":"ee5462cc","implemented":true,"kind":"function","modifiers":[],"name":"whitelistToken","nameLocation":"9053:14:3","parameters":{"id":939,"nodeType":"ParameterList","parameters":[{"constant":false,"id":936,"mutability":"mutable","name":"token","nameLocation":"9076:5:3","nodeType":"VariableDeclaration","scope":963,"src":"9068:13:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":935,"name":"address","nodeType":"ElementaryTypeName","src":"9068:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":938,"mutability":"mutable","name":"notes","nameLocation":"9099:5:3","nodeType":"VariableDeclaration","scope":963,"src":"9083:21:3","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":937,"name":"string","nodeType":"ElementaryTypeName","src":"9083:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"9067:38:3"},"returnParameters":{"id":940,"nodeType":"ParameterList","parameters":[],"src":"9115:0:3"},"scope":1751,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":984,"nodeType":"FunctionDefinition","src":"9319:213:3","nodes":[],"body":{"id":983,"nodeType":"Block","src":"9403:129:3","nodes":[],"statements":[{"expression":{"arguments":[{"id":971,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":965,"src":"9427:5:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"617070726f766544656c65676174696f6e28616464726573732c75696e7432353629","id":973,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9446:36:3","typeDescriptions":{"typeIdentifier":"t_stringliteral_c04a8a10f889571e478e7f36393a72a25c3d1995240c52f39cafde7da43517e5","typeString":"literal_string \"approveDelegation(address,uint256)\""},"value":"approveDelegation(address,uint256)"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c04a8a10f889571e478e7f36393a72a25c3d1995240c52f39cafde7da43517e5","typeString":"literal_string \"approveDelegation(address,uint256)\""}],"id":972,"name":"getSelector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":440,"src":"9434:11:3","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes4_$","typeString":"function (string memory) pure returns (bytes4)"}},"id":974,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9434:49:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":975,"name":"notes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":967,"src":"9485:5:3","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}],"id":970,"name":"allowCallSite","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":488,"src":"9413:13:3","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes4_$_t_string_calldata_ptr_$returns$__$","typeString":"function (address,bytes4,string calldata)"}},"id":976,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9413:78:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":977,"nodeType":"ExpressionStatement","src":"9413:78:3"},{"expression":{"arguments":[{"id":979,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":965,"src":"9512:5:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":980,"name":"notes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":967,"src":"9519:5:3","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}],"id":978,"name":"allowAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":739,"src":"9501:10:3","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_string_calldata_ptr_$returns$__$","typeString":"function (address,string calldata)"}},"id":981,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9501:24:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":982,"nodeType":"ExpressionStatement","src":"9501:24:3"}]},"functionSelector":"6d9a1423","implemented":true,"kind":"function","modifiers":[],"name":"whitelistTokenForDelegation","nameLocation":"9328:27:3","parameters":{"id":968,"nodeType":"ParameterList","parameters":[{"constant":false,"id":965,"mutability":"mutable","name":"token","nameLocation":"9364:5:3","nodeType":"VariableDeclaration","scope":984,"src":"9356:13:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":964,"name":"address","nodeType":"ElementaryTypeName","src":"9356:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":967,"mutability":"mutable","name":"notes","nameLocation":"9387:5:3","nodeType":"VariableDeclaration","scope":984,"src":"9371:21:3","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":966,"name":"string","nodeType":"ElementaryTypeName","src":"9371:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"9355:38:3"},"returnParameters":{"id":969,"nodeType":"ParameterList","parameters":[],"src":"9403:0:3"},"scope":1751,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":1102,"nodeType":"FunctionDefinition","src":"9538:1459:3","nodes":[],"body":{"id":1101,"nodeType":"Block","src":"9673:1324:3","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":996,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":993,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":986,"src":"9687:6:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":994,"name":"getGovernanceAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":450,"src":"9697:20:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":995,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9697:22:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9687:32:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":999,"nodeType":"IfStatement","src":"9684:125:3","trueBody":{"id":998,"nodeType":"Block","src":"9721:88:3","statements":[{"functionReturnParameters":992,"id":997,"nodeType":"Return","src":"9792:7:3"}]}},{"expression":{"arguments":[{"arguments":[{"id":1002,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":986,"src":"9843:6:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1001,"name":"isAllowedSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":789,"src":"9827:15:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":1003,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9827:23:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53656e646572206e6f7420616c6c6f776564","id":1004,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9852:20:3","typeDescriptions":{"typeIdentifier":"t_stringliteral_997485bfc3fd921e0cd692e382b844856aabcff8c7d4b84bf33c290035caf76e","typeString":"literal_string \"Sender not allowed\""},"value":"Sender not allowed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_997485bfc3fd921e0cd692e382b844856aabcff8c7d4b84bf33c290035caf76e","typeString":"literal_string \"Sender not allowed\""}],"id":1000,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"9819:7:3","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1005,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9819:54:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1006,"nodeType":"ExpressionStatement","src":"9819:54:3"},{"assignments":[1008],"declarations":[{"constant":false,"id":1008,"mutability":"mutable","name":"selector","nameLocation":"9946:8:3","nodeType":"VariableDeclaration","scope":1101,"src":"9939:15:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":1007,"name":"bytes4","nodeType":"ElementaryTypeName","src":"9939:6:3","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"id":1015,"initialValue":{"arguments":[{"baseExpression":{"id":1011,"name":"callDataWithSelector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":990,"src":"9964:20:3","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"endExpression":{"hexValue":"34","id":1012,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9986:1:3","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"id":1013,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexRangeAccess","src":"9964:24:3","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr_slice","typeString":"bytes calldata slice"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr_slice","typeString":"bytes calldata slice"}],"id":1010,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9957:6:3","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes4_$","typeString":"type(bytes4)"},"typeName":{"id":1009,"name":"bytes4","nodeType":"ElementaryTypeName","src":"9957:6:3","typeDescriptions":{}}},"id":1014,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9957:32:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"VariableDeclarationStatement","src":"9939:50:3"},{"assignments":[1017],"declarations":[{"constant":false,"id":1017,"mutability":"mutable","name":"callData","nameLocation":"10014:8:3","nodeType":"VariableDeclaration","scope":1101,"src":"9999:23:3","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":1016,"name":"bytes","nodeType":"ElementaryTypeName","src":"9999:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":1021,"initialValue":{"baseExpression":{"id":1018,"name":"callDataWithSelector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":990,"src":"10025:20:3","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"id":1020,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexRangeAccess","src":"10025:24:3","startExpression":{"hexValue":"34","id":1019,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10046:1:3","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr_slice","typeString":"bytes calldata slice"}},"nodeType":"VariableDeclarationStatement","src":"9999:50:3"},{"expression":{"arguments":[{"arguments":[{"id":1024,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":988,"src":"10085:6:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1025,"name":"selector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1008,"src":"10093:8:3","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"id":1023,"name":"isAllowedCallSite","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":775,"src":"10067:17:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bytes4_$returns$_t_bool_$","typeString":"function (address,bytes4) view returns (bool)"}},"id":1026,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10067:35:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"43616c6c2073697465206e6f7420616c6c6f776564","id":1027,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"10104:23:3","typeDescriptions":{"typeIdentifier":"t_stringliteral_6e5bca9344ecf5c55eaaadcdeddba06a330af020554ced34b057db935a40a7fe","typeString":"literal_string \"Call site not allowed\""},"value":"Call site not allowed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_6e5bca9344ecf5c55eaaadcdeddba06a330af020554ced34b057db935a40a7fe","typeString":"literal_string \"Call site not allowed\""}],"id":1022,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"10059:7:3","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1028,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10059:69:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1029,"nodeType":"ExpressionStatement","src":"10059:69:3"},{"condition":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":1034,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1030,"name":"selector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1008,"src":"10142:8:3","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"737761704578616374546f6b656e73466f72546f6b656e732875696e743235362c75696e743235362c616464726573735b5d2c616464726573732c75696e7432353629","id":1032,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"10166:69:3","typeDescriptions":{"typeIdentifier":"t_stringliteral_38ed1739ee07daf49933f1800d1a9bc8d39a6876ea11e643f9c4c39c66df0ee8","typeString":"literal_string \"swapExactTokensForTokens(uint256,uint256,address[],address,uint256)\""},"value":"swapExactTokensForTokens(uint256,uint256,address[],address,uint256)"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_38ed1739ee07daf49933f1800d1a9bc8d39a6876ea11e643f9c4c39c66df0ee8","typeString":"literal_string \"swapExactTokensForTokens(uint256,uint256,address[],address,uint256)\""}],"id":1031,"name":"getSelector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":440,"src":"10154:11:3","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes4_$","typeString":"function (string memory) pure returns (bytes4)"}},"id":1033,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10154:82:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"10142:94:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":1044,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1040,"name":"selector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1008,"src":"10315:8:3","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"6578616374496e707574282862797465732c616464726573732c75696e743235362c75696e743235362c75696e743235362929","id":1042,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"10339:53:3","typeDescriptions":{"typeIdentifier":"t_stringliteral_c04b8d590f54358a9bd8b37bb111b5fac5fac725979832603f2a7228458db499","typeString":"literal_string \"exactInput((bytes,address,uint256,uint256,uint256))\""},"value":"exactInput((bytes,address,uint256,uint256,uint256))"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c04b8d590f54358a9bd8b37bb111b5fac5fac725979832603f2a7228458db499","typeString":"literal_string \"exactInput((bytes,address,uint256,uint256,uint256))\""}],"id":1041,"name":"getSelector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":440,"src":"10327:11:3","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes4_$","typeString":"function (string memory) pure returns (bytes4)"}},"id":1043,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10327:66:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"10315:78:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":1054,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1050,"name":"selector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1008,"src":"10458:8:3","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"6d756c746963616c6c2862797465735b5d29","id":1052,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"10482:20:3","typeDescriptions":{"typeIdentifier":"t_stringliteral_ac9650d882acfa253cba1ed543b9ff47351da99c3bd00a89625e5cdb2099009c","typeString":"literal_string \"multicall(bytes[])\""},"value":"multicall(bytes[])"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_ac9650d882acfa253cba1ed543b9ff47351da99c3bd00a89625e5cdb2099009c","typeString":"literal_string \"multicall(bytes[])\""}],"id":1051,"name":"getSelector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":440,"src":"10470:11:3","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes4_$","typeString":"function (string memory) pure returns (bytes4)"}},"id":1053,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10470:33:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"10458:45:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":1064,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1060,"name":"selector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1008,"src":"10573:8:3","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"7472616e7366657228616464726573732c75696e7432353629","id":1062,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"10597:27:3","typeDescriptions":{"typeIdentifier":"t_stringliteral_a9059cbb2ab09eb219583f4a59a5d0623ade346d962bcd4e46b11da047c9049b","typeString":"literal_string \"transfer(address,uint256)\""},"value":"transfer(address,uint256)"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_a9059cbb2ab09eb219583f4a59a5d0623ade346d962bcd4e46b11da047c9049b","typeString":"literal_string \"transfer(address,uint256)\""}],"id":1061,"name":"getSelector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":440,"src":"10585:11:3","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes4_$","typeString":"function (string memory) pure returns (bytes4)"}},"id":1063,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10585:40:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"10573:52:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":1074,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1070,"name":"selector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1008,"src":"10688:8:3","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"617070726f766528616464726573732c75696e7432353629","id":1072,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"10712:26:3","typeDescriptions":{"typeIdentifier":"t_stringliteral_095ea7b334ae44009aa867bfb386f5c3b4b443ac6f0ee573fa91c4608fbadfba","typeString":"literal_string \"approve(address,uint256)\""},"value":"approve(address,uint256)"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_095ea7b334ae44009aa867bfb386f5c3b4b443ac6f0ee573fa91c4608fbadfba","typeString":"literal_string \"approve(address,uint256)\""}],"id":1071,"name":"getSelector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":440,"src":"10700:11:3","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes4_$","typeString":"function (string memory) pure returns (bytes4)"}},"id":1073,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10700:39:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"10688:51:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":1084,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1080,"name":"selector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1008,"src":"10801:8:3","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"617070726f766544656c65676174696f6e28616464726573732c75696e7432353629","id":1082,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"10825:36:3","typeDescriptions":{"typeIdentifier":"t_stringliteral_c04a8a10f889571e478e7f36393a72a25c3d1995240c52f39cafde7da43517e5","typeString":"literal_string \"approveDelegation(address,uint256)\""},"value":"approveDelegation(address,uint256)"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c04a8a10f889571e478e7f36393a72a25c3d1995240c52f39cafde7da43517e5","typeString":"literal_string \"approveDelegation(address,uint256)\""}],"id":1081,"name":"getSelector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":440,"src":"10813:11:3","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes4_$","typeString":"function (string memory) pure returns (bytes4)"}},"id":1083,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10813:49:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"10801:61:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":1094,"nodeType":"Block","src":"10931:60:3","statements":[{"expression":{"arguments":[{"hexValue":"556e6b6e6f776e2066756e6374696f6e2073656c6563746f72","id":1091,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"10952:27:3","typeDescriptions":{"typeIdentifier":"t_stringliteral_812e74976448150c48c74fdbb6cba937f2f0698204762ebd4ddc99db08a5594f","typeString":"literal_string \"Unknown function selector\""},"value":"Unknown function selector"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_812e74976448150c48c74fdbb6cba937f2f0698204762ebd4ddc99db08a5594f","typeString":"literal_string \"Unknown function selector\""}],"id":1090,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"10945:6:3","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":1092,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10945:35:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1093,"nodeType":"ExpressionStatement","src":"10945:35:3"}]},"id":1095,"nodeType":"IfStatement","src":"10798:193:3","trueBody":{"id":1089,"nodeType":"Block","src":"10864:61:3","statements":[{"expression":{"arguments":[{"id":1086,"name":"callData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1017,"src":"10905:8:3","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":1085,"name":"validate_approveDelegation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":934,"src":"10878:26:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory) view"}},"id":1087,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10878:36:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1088,"nodeType":"ExpressionStatement","src":"10878:36:3"}]}},"id":1096,"nodeType":"IfStatement","src":"10685:306:3","trueBody":{"id":1079,"nodeType":"Block","src":"10741:51:3","statements":[{"expression":{"arguments":[{"id":1076,"name":"callData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1017,"src":"10772:8:3","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":1075,"name":"validate_approve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":909,"src":"10755:16:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory) view"}},"id":1077,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10755:26:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1078,"nodeType":"ExpressionStatement","src":"10755:26:3"}]}},"id":1097,"nodeType":"IfStatement","src":"10570:421:3","trueBody":{"id":1069,"nodeType":"Block","src":"10627:52:3","statements":[{"expression":{"arguments":[{"id":1066,"name":"callData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1017,"src":"10659:8:3","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":1065,"name":"validate_transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":884,"src":"10641:17:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory) view"}},"id":1067,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10641:27:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1068,"nodeType":"ExpressionStatement","src":"10641:27:3"}]}},"id":1098,"nodeType":"IfStatement","src":"10455:536:3","trueBody":{"id":1059,"nodeType":"Block","src":"10505:59:3","statements":[{"expression":{"arguments":[{"id":1056,"name":"callData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1017,"src":"10544:8:3","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":1055,"name":"validate_1deltaMulticall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1468,"src":"10519:24:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory) view"}},"id":1057,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10519:34:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1058,"nodeType":"ExpressionStatement","src":"10519:34:3"}]}},"id":1099,"nodeType":"IfStatement","src":"10312:679:3","trueBody":{"id":1049,"nodeType":"Block","src":"10395:54:3","statements":[{"expression":{"arguments":[{"id":1046,"name":"callData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1017,"src":"10429:8:3","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":1045,"name":"validate_exactInput","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1218,"src":"10409:19:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory) view"}},"id":1047,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10409:29:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1048,"nodeType":"ExpressionStatement","src":"10409:29:3"}]}},"id":1100,"nodeType":"IfStatement","src":"10139:852:3","trueBody":{"id":1039,"nodeType":"Block","src":"10238:68:3","statements":[{"expression":{"arguments":[{"id":1036,"name":"callData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1017,"src":"10286:8:3","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":1035,"name":"validate_swapExactTokensForTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1168,"src":"10252:33:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory) view"}},"id":1037,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10252:43:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1038,"nodeType":"ExpressionStatement","src":"10252:43:3"}]}}]},"baseFunctions":[1762],"functionSelector":"6d5025f1","implemented":true,"kind":"function","modifiers":[],"name":"validateCall","nameLocation":"9547:12:3","parameters":{"id":991,"nodeType":"ParameterList","parameters":[{"constant":false,"id":986,"mutability":"mutable","name":"sender","nameLocation":"9577:6:3","nodeType":"VariableDeclaration","scope":1102,"src":"9569:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":985,"name":"address","nodeType":"ElementaryTypeName","src":"9569:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":988,"mutability":"mutable","name":"target","nameLocation":"9601:6:3","nodeType":"VariableDeclaration","scope":1102,"src":"9593:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":987,"name":"address","nodeType":"ElementaryTypeName","src":"9593:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":990,"mutability":"mutable","name":"callDataWithSelector","nameLocation":"9632:20:3","nodeType":"VariableDeclaration","scope":1102,"src":"9617:35:3","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":989,"name":"bytes","nodeType":"ElementaryTypeName","src":"9617:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"9559:99:3"},"returnParameters":{"id":992,"nodeType":"ParameterList","parameters":[],"src":"9673:0:3"},"scope":1751,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":1168,"nodeType":"FunctionDefinition","src":"11036:463:3","nodes":[],"body":{"id":1167,"nodeType":"Block","src":"11114:385:3","nodes":[],"statements":[{"assignments":[null,null,1111,1113,null],"declarations":[null,null,{"constant":false,"id":1111,"mutability":"mutable","name":"path","nameLocation":"11146:4:3","nodeType":"VariableDeclaration","scope":1167,"src":"11129:21:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":1109,"name":"address","nodeType":"ElementaryTypeName","src":"11129:7:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1110,"nodeType":"ArrayTypeName","src":"11129:9:3","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":1113,"mutability":"mutable","name":"to","nameLocation":"11160:2:3","nodeType":"VariableDeclaration","scope":1167,"src":"11152:10:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1112,"name":"address","nodeType":"ElementaryTypeName","src":"11152:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},null],"id":1130,"initialValue":{"arguments":[{"id":1116,"name":"callData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1104,"src":"11179:8:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":1118,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11190:4:3","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":1117,"name":"uint","nodeType":"ElementaryTypeName","src":"11190:4:3","typeDescriptions":{}}},{"id":1120,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11196:4:3","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":1119,"name":"uint","nodeType":"ElementaryTypeName","src":"11196:4:3","typeDescriptions":{}}},{"baseExpression":{"id":1122,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11202:7:3","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1121,"name":"address","nodeType":"ElementaryTypeName","src":"11202:7:3","typeDescriptions":{}}},"id":1123,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"IndexAccess","src":"11202:9:3","typeDescriptions":{"typeIdentifier":"t_type$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"type(address[] memory)"}},{"id":1125,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11213:7:3","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1124,"name":"address","nodeType":"ElementaryTypeName","src":"11213:7:3","typeDescriptions":{}}},{"id":1127,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11222:4:3","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":1126,"name":"uint","nodeType":"ElementaryTypeName","src":"11222:4:3","typeDescriptions":{}}}],"id":1128,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"11189:38:3","typeDescriptions":{"typeIdentifier":"t_tuple$_t_type$_t_uint256_$_$_t_type$_t_uint256_$_$_t_type$_t_array$_t_address_$dyn_memory_ptr_$_$_t_type$_t_address_$_$_t_type$_t_uint256_$_$","typeString":"tuple(type(uint256),type(uint256),type(address[] memory),type(address),type(uint256))"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_tuple$_t_type$_t_uint256_$_$_t_type$_t_uint256_$_$_t_type$_t_array$_t_address_$dyn_memory_ptr_$_$_t_type$_t_address_$_$_t_type$_t_uint256_$_$","typeString":"tuple(type(uint256),type(uint256),type(address[] memory),type(address),type(uint256))"}],"expression":{"id":1114,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"11168:3:3","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":1115,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11172:6:3","memberName":"decode","nodeType":"MemberAccess","src":"11168:10:3","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":1129,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11168:60:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_array$_t_address_$dyn_memory_ptr_$_t_address_payable_$_t_uint256_$","typeString":"tuple(uint256,uint256,address[] memory,address payable,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"11124:104:3"},{"expression":{"arguments":[{"arguments":[{"id":1133,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1113,"src":"11265:2:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1132,"name":"isAllowedReceiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":803,"src":"11247:17:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":1134,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11247:21:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5265636569766572206164647265737320646f6573206e6f74206d61746368","id":1135,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"11270:33:3","typeDescriptions":{"typeIdentifier":"t_stringliteral_914992591b078845495b58c4516b430d9e17451e3f92fff3d4d5ee434bb6c65c","typeString":"literal_string \"Receiver address does not match\""},"value":"Receiver address does not match"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_914992591b078845495b58c4516b430d9e17451e3f92fff3d4d5ee434bb6c65c","typeString":"literal_string \"Receiver address does not match\""}],"id":1131,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"11239:7:3","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1136,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11239:65:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1137,"nodeType":"ExpressionStatement","src":"11239:65:3"},{"assignments":[1139],"declarations":[{"constant":false,"id":1139,"mutability":"mutable","name":"token","nameLocation":"11323:5:3","nodeType":"VariableDeclaration","scope":1167,"src":"11315:13:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1138,"name":"address","nodeType":"ElementaryTypeName","src":"11315:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":1140,"nodeType":"VariableDeclarationStatement","src":"11315:13:3"},{"body":{"id":1165,"nodeType":"Block","src":"11380:105:3","statements":[{"expression":{"id":1156,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1152,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1139,"src":"11394:5:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":1153,"name":"path","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1111,"src":"11402:4:3","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":1155,"indexExpression":{"id":1154,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1142,"src":"11407:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11402:7:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"11394:15:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1157,"nodeType":"ExpressionStatement","src":"11394:15:3"},{"expression":{"arguments":[{"arguments":[{"id":1160,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1139,"src":"11446:5:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1159,"name":"isAllowedAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":859,"src":"11431:14:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":1161,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11431:21:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"546f6b656e206e6f7420616c6c6f776564","id":1162,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"11454:19:3","typeDescriptions":{"typeIdentifier":"t_stringliteral_b318a5ee46f86f39aed1f4d1664d882d10cd5f107f7744b083b8f848bbae3c7b","typeString":"literal_string \"Token not allowed\""},"value":"Token not allowed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b318a5ee46f86f39aed1f4d1664d882d10cd5f107f7744b083b8f848bbae3c7b","typeString":"literal_string \"Token not allowed\""}],"id":1158,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"11423:7:3","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1163,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11423:51:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1164,"nodeType":"ExpressionStatement","src":"11423:51:3"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1148,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1145,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1142,"src":"11358:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":1146,"name":"path","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1111,"src":"11362:4:3","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":1147,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11367:6:3","memberName":"length","nodeType":"MemberAccess","src":"11362:11:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11358:15:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1166,"initializationExpression":{"assignments":[1142],"declarations":[{"constant":false,"id":1142,"mutability":"mutable","name":"i","nameLocation":"11351:1:3","nodeType":"VariableDeclaration","scope":1166,"src":"11343:9:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1141,"name":"uint256","nodeType":"ElementaryTypeName","src":"11343:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1144,"initialValue":{"hexValue":"30","id":1143,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11355:1:3","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"11343:13:3"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":1150,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"11375:3:3","subExpression":{"id":1149,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1142,"src":"11375:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1151,"nodeType":"ExpressionStatement","src":"11375:3:3"},"nodeType":"ForStatement","src":"11338:147:3"}]},"functionSelector":"761bcd9c","implemented":true,"kind":"function","modifiers":[],"name":"validate_swapExactTokensForTokens","nameLocation":"11045:33:3","parameters":{"id":1105,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1104,"mutability":"mutable","name":"callData","nameLocation":"11092:8:3","nodeType":"VariableDeclaration","scope":1168,"src":"11079:21:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1103,"name":"bytes","nodeType":"ElementaryTypeName","src":"11079:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"11078:23:3"},"returnParameters":{"id":1106,"nodeType":"ParameterList","parameters":[],"src":"11114:0:3"},"scope":1751,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":1189,"nodeType":"FunctionDefinition","src":"11505:260:3","nodes":[],"body":{"id":1188,"nodeType":"Block","src":"11587:178:3","nodes":[],"statements":[{"expression":{"arguments":[{"id":1176,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1170,"src":"11611:6:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"737761704578616374546f6b656e73466f72546f6b656e732875696e743235362c75696e743235362c616464726573735b5d2c616464726573732c75696e7432353629","id":1178,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"11631:69:3","typeDescriptions":{"typeIdentifier":"t_stringliteral_38ed1739ee07daf49933f1800d1a9bc8d39a6876ea11e643f9c4c39c66df0ee8","typeString":"literal_string \"swapExactTokensForTokens(uint256,uint256,address[],address,uint256)\""},"value":"swapExactTokensForTokens(uint256,uint256,address[],address,uint256)"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_38ed1739ee07daf49933f1800d1a9bc8d39a6876ea11e643f9c4c39c66df0ee8","typeString":"literal_string \"swapExactTokensForTokens(uint256,uint256,address[],address,uint256)\""}],"id":1177,"name":"getSelector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":440,"src":"11619:11:3","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes4_$","typeString":"function (string memory) pure returns (bytes4)"}},"id":1179,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11619:82:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":1180,"name":"notes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1172,"src":"11703:5:3","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}],"id":1175,"name":"allowCallSite","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":488,"src":"11597:13:3","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes4_$_t_string_calldata_ptr_$returns$__$","typeString":"function (address,bytes4,string calldata)"}},"id":1181,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11597:112:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1182,"nodeType":"ExpressionStatement","src":"11597:112:3"},{"expression":{"arguments":[{"id":1184,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1170,"src":"11744:6:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1185,"name":"notes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1172,"src":"11752:5:3","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}],"id":1183,"name":"allowApprovalDestination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":657,"src":"11719:24:3","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_string_calldata_ptr_$returns$__$","typeString":"function (address,string calldata)"}},"id":1186,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11719:39:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1187,"nodeType":"ExpressionStatement","src":"11719:39:3"}]},"functionSelector":"3ea35551","implemented":true,"kind":"function","modifiers":[],"name":"whitelistUniswapV2Router","nameLocation":"11514:24:3","parameters":{"id":1173,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1170,"mutability":"mutable","name":"router","nameLocation":"11547:6:3","nodeType":"VariableDeclaration","scope":1189,"src":"11539:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1169,"name":"address","nodeType":"ElementaryTypeName","src":"11539:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1172,"mutability":"mutable","name":"notes","nameLocation":"11571:5:3","nodeType":"VariableDeclaration","scope":1189,"src":"11555:21:3","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":1171,"name":"string","nodeType":"ElementaryTypeName","src":"11555:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"11538:39:3"},"returnParameters":{"id":1174,"nodeType":"ParameterList","parameters":[],"src":"11587:0:3"},"scope":1751,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":1218,"nodeType":"FunctionDefinition","src":"11804:298:3","nodes":[],"body":{"id":1217,"nodeType":"Block","src":"11868:234:3","nodes":[],"statements":[{"assignments":[1196],"declarations":[{"constant":false,"id":1196,"mutability":"mutable","name":"params","nameLocation":"11903:6:3","nodeType":"VariableDeclaration","scope":1217,"src":"11879:30:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ExactInputParams_$285_memory_ptr","typeString":"struct GuardV0.ExactInputParams"},"typeName":{"id":1195,"nodeType":"UserDefinedTypeName","pathNode":{"id":1194,"name":"ExactInputParams","nameLocations":["11879:16:3"],"nodeType":"IdentifierPath","referencedDeclaration":285,"src":"11879:16:3"},"referencedDeclaration":285,"src":"11879:16:3","typeDescriptions":{"typeIdentifier":"t_struct$_ExactInputParams_$285_storage_ptr","typeString":"struct GuardV0.ExactInputParams"}},"visibility":"internal"}],"id":1203,"initialValue":{"arguments":[{"id":1199,"name":"callData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1191,"src":"11924:8:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":1200,"name":"ExactInputParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":285,"src":"11935:16:3","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_ExactInputParams_$285_storage_ptr_$","typeString":"type(struct GuardV0.ExactInputParams storage pointer)"}}],"id":1201,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"11934:18:3","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_ExactInputParams_$285_storage_ptr_$","typeString":"type(struct GuardV0.ExactInputParams storage pointer)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_struct$_ExactInputParams_$285_storage_ptr_$","typeString":"type(struct GuardV0.ExactInputParams storage pointer)"}],"expression":{"id":1197,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"11913:3:3","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":1198,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11917:6:3","memberName":"decode","nodeType":"MemberAccess","src":"11913:10:3","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":1202,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11913:40:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ExactInputParams_$285_memory_ptr","typeString":"struct GuardV0.ExactInputParams memory"}},"nodeType":"VariableDeclarationStatement","src":"11878:75:3"},{"expression":{"arguments":[{"arguments":[{"expression":{"id":1206,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1196,"src":"11998:6:3","typeDescriptions":{"typeIdentifier":"t_struct$_ExactInputParams_$285_memory_ptr","typeString":"struct GuardV0.ExactInputParams memory"}},"id":1207,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12005:9:3","memberName":"recipient","nodeType":"MemberAccess","referencedDeclaration":278,"src":"11998:16:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1205,"name":"isAllowedReceiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":803,"src":"11980:17:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":1208,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11980:35:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5265636569766572206164647265737320646f6573206e6f74206d61746368","id":1209,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"12017:33:3","typeDescriptions":{"typeIdentifier":"t_stringliteral_914992591b078845495b58c4516b430d9e17451e3f92fff3d4d5ee434bb6c65c","typeString":"literal_string \"Receiver address does not match\""},"value":"Receiver address does not match"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_914992591b078845495b58c4516b430d9e17451e3f92fff3d4d5ee434bb6c65c","typeString":"literal_string \"Receiver address does not match\""}],"id":1204,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"11972:7:3","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1210,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11972:79:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1211,"nodeType":"ExpressionStatement","src":"11972:79:3"},{"expression":{"arguments":[{"expression":{"id":1213,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1196,"src":"12083:6:3","typeDescriptions":{"typeIdentifier":"t_struct$_ExactInputParams_$285_memory_ptr","typeString":"struct GuardV0.ExactInputParams memory"}},"id":1214,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12090:4:3","memberName":"path","nodeType":"MemberAccess","referencedDeclaration":276,"src":"12083:11:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":1212,"name":"validateUniswapV3Path","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1297,"src":"12061:21:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory) view"}},"id":1215,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12061:34:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1216,"nodeType":"ExpressionStatement","src":"12061:34:3"}]},"functionSelector":"ebe26816","implemented":true,"kind":"function","modifiers":[],"name":"validate_exactInput","nameLocation":"11813:19:3","parameters":{"id":1192,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1191,"mutability":"mutable","name":"callData","nameLocation":"11846:8:3","nodeType":"VariableDeclaration","scope":1218,"src":"11833:21:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1190,"name":"bytes","nodeType":"ElementaryTypeName","src":"11833:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"11832:23:3"},"returnParameters":{"id":1193,"nodeType":"ParameterList","parameters":[],"src":"11868:0:3"},"scope":1751,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":1247,"nodeType":"FunctionDefinition","src":"12108:301:3","nodes":[],"body":{"id":1246,"nodeType":"Block","src":"12173:236:3","nodes":[],"statements":[{"assignments":[1225],"declarations":[{"constant":false,"id":1225,"mutability":"mutable","name":"params","nameLocation":"12209:6:3","nodeType":"VariableDeclaration","scope":1246,"src":"12184:31:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ExactOutputParams_$296_memory_ptr","typeString":"struct GuardV0.ExactOutputParams"},"typeName":{"id":1224,"nodeType":"UserDefinedTypeName","pathNode":{"id":1223,"name":"ExactOutputParams","nameLocations":["12184:17:3"],"nodeType":"IdentifierPath","referencedDeclaration":296,"src":"12184:17:3"},"referencedDeclaration":296,"src":"12184:17:3","typeDescriptions":{"typeIdentifier":"t_struct$_ExactOutputParams_$296_storage_ptr","typeString":"struct GuardV0.ExactOutputParams"}},"visibility":"internal"}],"id":1232,"initialValue":{"arguments":[{"id":1228,"name":"callData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1220,"src":"12230:8:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":1229,"name":"ExactOutputParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":296,"src":"12241:17:3","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_ExactOutputParams_$296_storage_ptr_$","typeString":"type(struct GuardV0.ExactOutputParams storage pointer)"}}],"id":1230,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"12240:19:3","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_ExactOutputParams_$296_storage_ptr_$","typeString":"type(struct GuardV0.ExactOutputParams storage pointer)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_struct$_ExactOutputParams_$296_storage_ptr_$","typeString":"type(struct GuardV0.ExactOutputParams storage pointer)"}],"expression":{"id":1226,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"12219:3:3","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":1227,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"12223:6:3","memberName":"decode","nodeType":"MemberAccess","src":"12219:10:3","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":1231,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12219:41:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ExactOutputParams_$296_memory_ptr","typeString":"struct GuardV0.ExactOutputParams memory"}},"nodeType":"VariableDeclarationStatement","src":"12183:77:3"},{"expression":{"arguments":[{"arguments":[{"expression":{"id":1235,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1225,"src":"12305:6:3","typeDescriptions":{"typeIdentifier":"t_struct$_ExactOutputParams_$296_memory_ptr","typeString":"struct GuardV0.ExactOutputParams memory"}},"id":1236,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12312:9:3","memberName":"recipient","nodeType":"MemberAccess","referencedDeclaration":289,"src":"12305:16:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1234,"name":"isAllowedReceiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":803,"src":"12287:17:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":1237,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12287:35:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5265636569766572206164647265737320646f6573206e6f74206d61746368","id":1238,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"12324:33:3","typeDescriptions":{"typeIdentifier":"t_stringliteral_914992591b078845495b58c4516b430d9e17451e3f92fff3d4d5ee434bb6c65c","typeString":"literal_string \"Receiver address does not match\""},"value":"Receiver address does not match"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_914992591b078845495b58c4516b430d9e17451e3f92fff3d4d5ee434bb6c65c","typeString":"literal_string \"Receiver address does not match\""}],"id":1233,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"12279:7:3","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1239,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12279:79:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1240,"nodeType":"ExpressionStatement","src":"12279:79:3"},{"expression":{"arguments":[{"expression":{"id":1242,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1225,"src":"12390:6:3","typeDescriptions":{"typeIdentifier":"t_struct$_ExactOutputParams_$296_memory_ptr","typeString":"struct GuardV0.ExactOutputParams memory"}},"id":1243,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12397:4:3","memberName":"path","nodeType":"MemberAccess","referencedDeclaration":287,"src":"12390:11:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":1241,"name":"validateUniswapV3Path","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1297,"src":"12368:21:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory) view"}},"id":1244,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12368:34:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1245,"nodeType":"ExpressionStatement","src":"12368:34:3"}]},"functionSelector":"e98539c5","implemented":true,"kind":"function","modifiers":[],"name":"validate_exactOutput","nameLocation":"12117:20:3","parameters":{"id":1221,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1220,"mutability":"mutable","name":"callData","nameLocation":"12151:8:3","nodeType":"VariableDeclaration","scope":1247,"src":"12138:21:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1219,"name":"bytes","nodeType":"ElementaryTypeName","src":"12138:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"12137:23:3"},"returnParameters":{"id":1222,"nodeType":"ParameterList","parameters":[],"src":"12173:0:3"},"scope":1751,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":1297,"nodeType":"FunctionDefinition","src":"12415:493:3","nodes":[],"body":{"id":1296,"nodeType":"Block","src":"12477:431:3","nodes":[],"statements":[{"assignments":[1253],"declarations":[{"constant":false,"id":1253,"mutability":"mutable","name":"tokenIn","nameLocation":"12495:7:3","nodeType":"VariableDeclaration","scope":1296,"src":"12487:15:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1252,"name":"address","nodeType":"ElementaryTypeName","src":"12487:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":1254,"nodeType":"VariableDeclarationStatement","src":"12487:15:3"},{"assignments":[1256],"declarations":[{"constant":false,"id":1256,"mutability":"mutable","name":"tokenOut","nameLocation":"12520:8:3","nodeType":"VariableDeclaration","scope":1296,"src":"12512:16:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1255,"name":"address","nodeType":"ElementaryTypeName","src":"12512:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":1257,"nodeType":"VariableDeclarationStatement","src":"12512:16:3"},{"body":{"id":1294,"nodeType":"Block","src":"12552:350:3","statements":[{"expression":{"id":1265,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":1259,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1256,"src":"12567:8:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1260,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1253,"src":"12577:7:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},null],"id":1261,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"12566:21:3","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_address_$__$","typeString":"tuple(address,address,)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":1262,"name":"path","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1249,"src":"12590:4:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":1263,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12595:15:3","memberName":"decodeFirstPool","nodeType":"MemberAccess","referencedDeclaration":2198,"src":"12590:20:3","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_address_$_t_address_$_t_uint24_$attached_to$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) pure returns (address,address,uint24)"}},"id":1264,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12590:22:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_address_$_t_uint24_$","typeString":"tuple(address,address,uint24)"}},"src":"12566:46:3","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1266,"nodeType":"ExpressionStatement","src":"12566:46:3"},{"expression":{"arguments":[{"arguments":[{"id":1269,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1253,"src":"12650:7:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1268,"name":"isAllowedAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":859,"src":"12635:14:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":1270,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12635:23:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"546f6b656e206e6f7420616c6c6f776564","id":1271,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"12660:19:3","typeDescriptions":{"typeIdentifier":"t_stringliteral_b318a5ee46f86f39aed1f4d1664d882d10cd5f107f7744b083b8f848bbae3c7b","typeString":"literal_string \"Token not allowed\""},"value":"Token not allowed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b318a5ee46f86f39aed1f4d1664d882d10cd5f107f7744b083b8f848bbae3c7b","typeString":"literal_string \"Token not allowed\""}],"id":1267,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"12627:7:3","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1272,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12627:53:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1273,"nodeType":"ExpressionStatement","src":"12627:53:3"},{"expression":{"arguments":[{"arguments":[{"id":1276,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1256,"src":"12717:8:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1275,"name":"isAllowedAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":859,"src":"12702:14:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":1277,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12702:24:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"546f6b656e206e6f7420616c6c6f776564","id":1278,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"12728:19:3","typeDescriptions":{"typeIdentifier":"t_stringliteral_b318a5ee46f86f39aed1f4d1664d882d10cd5f107f7744b083b8f848bbae3c7b","typeString":"literal_string \"Token not allowed\""},"value":"Token not allowed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b318a5ee46f86f39aed1f4d1664d882d10cd5f107f7744b083b8f848bbae3c7b","typeString":"literal_string \"Token not allowed\""}],"id":1274,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"12694:7:3","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1279,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12694:54:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1280,"nodeType":"ExpressionStatement","src":"12694:54:3"},{"condition":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":1281,"name":"path","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1249,"src":"12767:4:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":1282,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12772:16:3","memberName":"hasMultiplePools","nodeType":"MemberAccess","referencedDeclaration":2146,"src":"12767:21:3","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bool_$attached_to$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) pure returns (bool)"}},"id":1283,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12767:23:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":1292,"nodeType":"Block","src":"12854:38:3","statements":[{"id":1291,"nodeType":"Break","src":"12872:5:3"}]},"id":1293,"nodeType":"IfStatement","src":"12763:129:3","trueBody":{"id":1290,"nodeType":"Block","src":"12792:56:3","statements":[{"expression":{"id":1288,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1284,"name":"path","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1249,"src":"12810:4:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":1285,"name":"path","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1249,"src":"12817:4:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":1286,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12822:9:3","memberName":"skipToken","nodeType":"MemberAccess","referencedDeclaration":2231,"src":"12817:14:3","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$attached_to$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) pure returns (bytes memory)"}},"id":1287,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12817:16:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"src":"12810:23:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":1289,"nodeType":"ExpressionStatement","src":"12810:23:3"}]}}]},"condition":{"hexValue":"74727565","id":1258,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"12546:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"id":1295,"nodeType":"WhileStatement","src":"12539:363:3"}]},"functionSelector":"1c123e77","implemented":true,"kind":"function","modifiers":[],"name":"validateUniswapV3Path","nameLocation":"12424:21:3","parameters":{"id":1250,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1249,"mutability":"mutable","name":"path","nameLocation":"12459:4:3","nodeType":"VariableDeclaration","scope":1297,"src":"12446:17:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1248,"name":"bytes","nodeType":"ElementaryTypeName","src":"12446:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"12445:19:3"},"returnParameters":{"id":1251,"nodeType":"ParameterList","parameters":[],"src":"12477:0:3"},"scope":1751,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":1326,"nodeType":"FunctionDefinition","src":"12914:351:3","nodes":[],"body":{"id":1325,"nodeType":"Block","src":"12996:269:3","nodes":[],"statements":[{"expression":{"arguments":[{"id":1305,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1299,"src":"13020:6:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"6578616374496e707574282862797465732c616464726573732c75696e743235362c75696e743235362c75696e743235362929","id":1307,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"13040:53:3","typeDescriptions":{"typeIdentifier":"t_stringliteral_c04b8d590f54358a9bd8b37bb111b5fac5fac725979832603f2a7228458db499","typeString":"literal_string \"exactInput((bytes,address,uint256,uint256,uint256))\""},"value":"exactInput((bytes,address,uint256,uint256,uint256))"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c04b8d590f54358a9bd8b37bb111b5fac5fac725979832603f2a7228458db499","typeString":"literal_string \"exactInput((bytes,address,uint256,uint256,uint256))\""}],"id":1306,"name":"getSelector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":440,"src":"13028:11:3","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes4_$","typeString":"function (string memory) pure returns (bytes4)"}},"id":1308,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13028:66:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":1309,"name":"notes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1301,"src":"13096:5:3","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}],"id":1304,"name":"allowCallSite","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":488,"src":"13006:13:3","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes4_$_t_string_calldata_ptr_$returns$__$","typeString":"function (address,bytes4,string calldata)"}},"id":1310,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13006:96:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1311,"nodeType":"ExpressionStatement","src":"13006:96:3"},{"expression":{"arguments":[{"id":1313,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1299,"src":"13126:6:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"65786163744f7574707574282862797465732c616464726573732c75696e743235362c75696e743235362c75696e743235362929","id":1315,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"13146:54:3","typeDescriptions":{"typeIdentifier":"t_stringliteral_f28c0498d09a24063b5cd0aecea6842e09a83611a774bc15bede4acd40c161b2","typeString":"literal_string \"exactOutput((bytes,address,uint256,uint256,uint256))\""},"value":"exactOutput((bytes,address,uint256,uint256,uint256))"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_f28c0498d09a24063b5cd0aecea6842e09a83611a774bc15bede4acd40c161b2","typeString":"literal_string \"exactOutput((bytes,address,uint256,uint256,uint256))\""}],"id":1314,"name":"getSelector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":440,"src":"13134:11:3","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes4_$","typeString":"function (string memory) pure returns (bytes4)"}},"id":1316,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13134:67:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":1317,"name":"notes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1301,"src":"13203:5:3","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}],"id":1312,"name":"allowCallSite","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":488,"src":"13112:13:3","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes4_$_t_string_calldata_ptr_$returns$__$","typeString":"function (address,bytes4,string calldata)"}},"id":1318,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13112:97:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1319,"nodeType":"ExpressionStatement","src":"13112:97:3"},{"expression":{"arguments":[{"id":1321,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1299,"src":"13244:6:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1322,"name":"notes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1301,"src":"13252:5:3","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}],"id":1320,"name":"allowApprovalDestination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":657,"src":"13219:24:3","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_string_calldata_ptr_$returns$__$","typeString":"function (address,string calldata)"}},"id":1323,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13219:39:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1324,"nodeType":"ExpressionStatement","src":"13219:39:3"}]},"functionSelector":"34ec8d7e","implemented":true,"kind":"function","modifiers":[],"name":"whitelistUniswapV3Router","nameLocation":"12923:24:3","parameters":{"id":1302,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1299,"mutability":"mutable","name":"router","nameLocation":"12956:6:3","nodeType":"VariableDeclaration","scope":1326,"src":"12948:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1298,"name":"address","nodeType":"ElementaryTypeName","src":"12948:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1301,"mutability":"mutable","name":"notes","nameLocation":"12980:5:3","nodeType":"VariableDeclaration","scope":1326,"src":"12964:21:3","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":1300,"name":"string","nodeType":"ElementaryTypeName","src":"12964:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"12947:39:3"},"returnParameters":{"id":1303,"nodeType":"ParameterList","parameters":[],"src":"12996:0:3"},"scope":1751,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":1468,"nodeType":"FunctionDefinition","src":"13300:1642:3","nodes":[],"body":{"id":1467,"nodeType":"Block","src":"13369:1573:3","nodes":[],"statements":[{"assignments":[1335],"declarations":[{"constant":false,"id":1335,"mutability":"mutable","name":"callArr","nameLocation":"13395:7:3","nodeType":"VariableDeclaration","scope":1467,"src":"13380:22:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_memory_ptr_$dyn_memory_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":1333,"name":"bytes","nodeType":"ElementaryTypeName","src":"13380:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":1334,"nodeType":"ArrayTypeName","src":"13380:7:3","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"visibility":"internal"}],"id":1344,"initialValue":{"arguments":[{"id":1338,"name":"callData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1328,"src":"13417:8:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"baseExpression":{"id":1340,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13428:5:3","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":1339,"name":"bytes","nodeType":"ElementaryTypeName","src":"13428:5:3","typeDescriptions":{}}},"id":1341,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"IndexAccess","src":"13428:7:3","typeDescriptions":{"typeIdentifier":"t_type$_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr_$","typeString":"type(bytes memory[] memory)"}}],"id":1342,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"13427:9:3","typeDescriptions":{"typeIdentifier":"t_type$_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr_$","typeString":"type(bytes memory[] memory)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr_$","typeString":"type(bytes memory[] memory)"}],"expression":{"id":1336,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"13406:3:3","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":1337,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"13410:6:3","memberName":"decode","nodeType":"MemberAccess","src":"13406:10:3","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":1343,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13406:31:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_memory_ptr_$dyn_memory_ptr","typeString":"bytes memory[] memory"}},"nodeType":"VariableDeclarationStatement","src":"13379:58:3"},{"body":{"id":1465,"nodeType":"Block","src":"13537:1399:3","statements":[{"assignments":[1356],"declarations":[{"constant":false,"id":1356,"mutability":"mutable","name":"callDataWithSelector","nameLocation":"13564:20:3","nodeType":"VariableDeclaration","scope":1465,"src":"13551:33:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1355,"name":"bytes","nodeType":"ElementaryTypeName","src":"13551:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":1360,"initialValue":{"baseExpression":{"id":1357,"name":"callArr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1335,"src":"13587:7:3","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_memory_ptr_$dyn_memory_ptr","typeString":"bytes memory[] memory"}},"id":1359,"indexExpression":{"id":1358,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1346,"src":"13595:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13587:10:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"13551:46:3"},{"assignments":[1362],"declarations":[{"constant":false,"id":1362,"mutability":"mutable","name":"selector","nameLocation":"13679:8:3","nodeType":"VariableDeclaration","scope":1465,"src":"13672:15:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":1361,"name":"bytes4","nodeType":"ElementaryTypeName","src":"13672:6:3","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"id":1371,"initialValue":{"arguments":[{"arguments":[{"hexValue":"30","id":1367,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13724:1:3","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"34","id":1368,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13727:1:3","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"}],"expression":{"id":1365,"name":"callDataWithSelector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1356,"src":"13697:20:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":1366,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13718:5:3","memberName":"slice","nodeType":"MemberAccess","referencedDeclaration":2002,"src":"13697:26:3","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bytes_memory_ptr_$attached_to$_t_bytes_memory_ptr_$","typeString":"function (bytes memory,uint256,uint256) pure returns (bytes memory)"}},"id":1369,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13697:32:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":1364,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13690:6:3","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes4_$","typeString":"type(bytes4)"},"typeName":{"id":1363,"name":"bytes4","nodeType":"ElementaryTypeName","src":"13690:6:3","typeDescriptions":{}}},"id":1370,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13690:40:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"VariableDeclarationStatement","src":"13672:58:3"},{"assignments":[1373],"declarations":[{"constant":false,"id":1373,"mutability":"mutable","name":"subCallData","nameLocation":"13757:11:3","nodeType":"VariableDeclaration","scope":1465,"src":"13744:24:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1372,"name":"bytes","nodeType":"ElementaryTypeName","src":"13744:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":1382,"initialValue":{"arguments":[{"hexValue":"34","id":1376,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13798:1:3","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1380,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":1377,"name":"callDataWithSelector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1356,"src":"13801:20:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":1378,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13822:6:3","memberName":"length","nodeType":"MemberAccess","src":"13801:27:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"34","id":1379,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13831:1:3","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"13801:31:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":1374,"name":"callDataWithSelector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1356,"src":"13771:20:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":1375,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13792:5:3","memberName":"slice","nodeType":"MemberAccess","referencedDeclaration":2002,"src":"13771:26:3","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bytes_memory_ptr_$attached_to$_t_bytes_memory_ptr_$","typeString":"function (bytes memory,uint256,uint256) pure returns (bytes memory)"}},"id":1381,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13771:62:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"13744:89:3"},{"condition":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":1387,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1383,"name":"selector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1362,"src":"13890:8:3","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"7472616e736665724552433230496e28616464726573732c75696e7432353629","id":1385,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"13914:34:3","typeDescriptions":{"typeIdentifier":"t_stringliteral_c4a7edaa45b02fdf53dea3170cb2e7c71fecd359d2e90de5b85244cd0984c8e4","typeString":"literal_string \"transferERC20In(address,uint256)\""},"value":"transferERC20In(address,uint256)"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c4a7edaa45b02fdf53dea3170cb2e7c71fecd359d2e90de5b85244cd0984c8e4","typeString":"literal_string \"transferERC20In(address,uint256)\""}],"id":1384,"name":"getSelector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":440,"src":"13902:11:3","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes4_$","typeString":"function (string memory) pure returns (bytes4)"}},"id":1386,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13902:47:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"13890:59:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":1397,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1393,"name":"selector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1362,"src":"14031:8:3","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"7472616e736665724552433230416c6c496e286164647265737329","id":1395,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"14055:29:3","typeDescriptions":{"typeIdentifier":"t_stringliteral_4614c692cf953c67cb6c24ffd2ad82ec8cb6b9ed626dc57fa40351044f698e48","typeString":"literal_string \"transferERC20AllIn(address)\""},"value":"transferERC20AllIn(address)"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_4614c692cf953c67cb6c24ffd2ad82ec8cb6b9ed626dc57fa40351044f698e48","typeString":"literal_string \"transferERC20AllIn(address)\""}],"id":1394,"name":"getSelector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":440,"src":"14043:11:3","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes4_$","typeString":"function (string memory) pure returns (bytes4)"}},"id":1396,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14043:42:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"14031:54:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":1407,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1403,"name":"selector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1362,"src":"14170:8:3","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"6465706f73697428616464726573732c6164647265737329","id":1405,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"14194:26:3","typeDescriptions":{"typeIdentifier":"t_stringliteral_f9609f0850d32f4654547876bd644826fb42a8da476763cd7995833d349fe4cc","typeString":"literal_string \"deposit(address,address)\""},"value":"deposit(address,address)"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_f9609f0850d32f4654547876bd644826fb42a8da476763cd7995833d349fe4cc","typeString":"literal_string \"deposit(address,address)\""}],"id":1404,"name":"getSelector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":440,"src":"14182:11:3","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes4_$","typeString":"function (string memory) pure returns (bytes4)"}},"id":1406,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14182:39:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"14170:51:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":1417,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1413,"name":"selector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1362,"src":"14295:8:3","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"776974686472617728616464726573732c6164647265737329","id":1415,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"14319:27:3","typeDescriptions":{"typeIdentifier":"t_stringliteral_f940e3851549e5c2062f065152e2151c57f5902a4d0de0f053e7f80205e4aabf","typeString":"literal_string \"withdraw(address,address)\""},"value":"withdraw(address,address)"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_f940e3851549e5c2062f065152e2151c57f5902a4d0de0f053e7f80205e4aabf","typeString":"literal_string \"withdraw(address,address)\""}],"id":1414,"name":"getSelector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":440,"src":"14307:11:3","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes4_$","typeString":"function (string memory) pure returns (bytes4)"}},"id":1416,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14307:40:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"14295:52:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":1427,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1423,"name":"selector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1362,"src":"14422:8:3","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"666c617368537761704578616374496e2875696e743235362c75696e743235362c627974657329","id":1425,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"14446:41:3","typeDescriptions":{"typeIdentifier":"t_stringliteral_df9ee9be6d9447b584411622581ce7278fb6b68815d8f23dce2a3ffe44eef48a","typeString":"literal_string \"flashSwapExactIn(uint256,uint256,bytes)\""},"value":"flashSwapExactIn(uint256,uint256,bytes)"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_df9ee9be6d9447b584411622581ce7278fb6b68815d8f23dce2a3ffe44eef48a","typeString":"literal_string \"flashSwapExactIn(uint256,uint256,bytes)\""}],"id":1424,"name":"getSelector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":440,"src":"14434:11:3","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes4_$","typeString":"function (string memory) pure returns (bytes4)"}},"id":1426,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14434:54:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"14422:66:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":1437,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1433,"name":"selector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1362,"src":"14572:8:3","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"666c6173685377617045786163744f75742875696e743235362c75696e743235362c627974657329","id":1435,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"14596:42:3","typeDescriptions":{"typeIdentifier":"t_stringliteral_d8c46304c9588148f7c58fac194de03a9abcad2811dc90561ade82d31c02674a","typeString":"literal_string \"flashSwapExactOut(uint256,uint256,bytes)\""},"value":"flashSwapExactOut(uint256,uint256,bytes)"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_d8c46304c9588148f7c58fac194de03a9abcad2811dc90561ade82d31c02674a","typeString":"literal_string \"flashSwapExactOut(uint256,uint256,bytes)\""}],"id":1434,"name":"getSelector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":440,"src":"14584:11:3","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes4_$","typeString":"function (string memory) pure returns (bytes4)"}},"id":1436,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14584:55:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"14572:67:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":1447,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1443,"name":"selector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1362,"src":"14723:8:3","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"666c61736853776170416c6c4f75742875696e743235362c627974657329","id":1445,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"14747:32:3","typeDescriptions":{"typeIdentifier":"t_stringliteral_2d4c2e9b01666b3d0808e31451f3f8854fc825ef1eb8bf66a603d5b139e3f068","typeString":"literal_string \"flashSwapAllOut(uint256,bytes)\""},"value":"flashSwapAllOut(uint256,bytes)"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_2d4c2e9b01666b3d0808e31451f3f8854fc825ef1eb8bf66a603d5b139e3f068","typeString":"literal_string \"flashSwapAllOut(uint256,bytes)\""}],"id":1444,"name":"getSelector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":440,"src":"14735:11:3","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes4_$","typeString":"function (string memory) pure returns (bytes4)"}},"id":1446,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14735:45:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"14723:57:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":1457,"nodeType":"Block","src":"14858:68:3","statements":[{"expression":{"arguments":[{"hexValue":"556e6b6e6f776e2066756e6374696f6e2073656c6563746f72","id":1454,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"14883:27:3","typeDescriptions":{"typeIdentifier":"t_stringliteral_812e74976448150c48c74fdbb6cba937f2f0698204762ebd4ddc99db08a5594f","typeString":"literal_string \"Unknown function selector\""},"value":"Unknown function selector"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_812e74976448150c48c74fdbb6cba937f2f0698204762ebd4ddc99db08a5594f","typeString":"literal_string \"Unknown function selector\""}],"id":1453,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"14876:6:3","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":1455,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14876:35:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1456,"nodeType":"ExpressionStatement","src":"14876:35:3"}]},"id":1458,"nodeType":"IfStatement","src":"14719:207:3","trueBody":{"id":1452,"nodeType":"Block","src":"14782:70:3","statements":[{"expression":{"arguments":[{"id":1449,"name":"subCallData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1373,"src":"14825:11:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":1448,"name":"validate_flashSwapAllOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1654,"src":"14800:24:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory) view"}},"id":1450,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14800:37:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1451,"nodeType":"ExpressionStatement","src":"14800:37:3"}]}},"id":1459,"nodeType":"IfStatement","src":"14568:358:3","trueBody":{"id":1442,"nodeType":"Block","src":"14641:72:3","statements":[{"expression":{"arguments":[{"id":1439,"name":"subCallData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1373,"src":"14686:11:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":1438,"name":"validate_flashSwapExactOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1632,"src":"14659:26:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory) view"}},"id":1440,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14659:39:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1441,"nodeType":"ExpressionStatement","src":"14659:39:3"}]}},"id":1460,"nodeType":"IfStatement","src":"14418:508:3","trueBody":{"id":1432,"nodeType":"Block","src":"14490:72:3","statements":[{"expression":{"arguments":[{"id":1429,"name":"subCallData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1373,"src":"14535:11:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":1428,"name":"validate_flashSwapExactInt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1608,"src":"14508:26:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory) view"}},"id":1430,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14508:39:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1431,"nodeType":"ExpressionStatement","src":"14508:39:3"}]}},"id":1461,"nodeType":"IfStatement","src":"14291:635:3","trueBody":{"id":1422,"nodeType":"Block","src":"14349:63:3","statements":[{"expression":{"arguments":[{"id":1419,"name":"subCallData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1373,"src":"14385:11:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":1418,"name":"validate_withdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1584,"src":"14367:17:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory) view"}},"id":1420,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14367:30:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1421,"nodeType":"ExpressionStatement","src":"14367:30:3"}]}},"id":1462,"nodeType":"IfStatement","src":"14166:760:3","trueBody":{"id":1412,"nodeType":"Block","src":"14223:62:3","statements":[{"expression":{"arguments":[{"id":1409,"name":"subCallData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1373,"src":"14258:11:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":1408,"name":"validate_deposit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1550,"src":"14241:16:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory) view"}},"id":1410,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14241:29:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1411,"nodeType":"ExpressionStatement","src":"14241:29:3"}]}},"id":1463,"nodeType":"IfStatement","src":"14027:899:3","trueBody":{"id":1402,"nodeType":"Block","src":"14087:73:3","statements":[{"expression":{"arguments":[{"id":1399,"name":"subCallData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1373,"src":"14133:11:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":1398,"name":"validate_transferERC20AllIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1516,"src":"14105:27:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory) view"}},"id":1400,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14105:40:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1401,"nodeType":"ExpressionStatement","src":"14105:40:3"}]}},"id":1464,"nodeType":"IfStatement","src":"13886:1040:3","trueBody":{"id":1392,"nodeType":"Block","src":"13951:70:3","statements":[{"expression":{"arguments":[{"id":1389,"name":"subCallData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1373,"src":"13994:11:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":1388,"name":"validate_transferERC20In","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1493,"src":"13969:24:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory) view"}},"id":1390,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13969:37:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1391,"nodeType":"ExpressionStatement","src":"13969:37:3"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1351,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1348,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1346,"src":"13512:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":1349,"name":"callArr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1335,"src":"13516:7:3","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_memory_ptr_$dyn_memory_ptr","typeString":"bytes memory[] memory"}},"id":1350,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13524:6:3","memberName":"length","nodeType":"MemberAccess","src":"13516:14:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13512:18:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1466,"initializationExpression":{"assignments":[1346],"declarations":[{"constant":false,"id":1346,"mutability":"mutable","name":"i","nameLocation":"13509:1:3","nodeType":"VariableDeclaration","scope":1466,"src":"13504:6:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1345,"name":"uint","nodeType":"ElementaryTypeName","src":"13504:4:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1347,"nodeType":"VariableDeclarationStatement","src":"13504:6:3"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":1353,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"13532:3:3","subExpression":{"id":1352,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1346,"src":"13532:1:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1354,"nodeType":"ExpressionStatement","src":"13532:3:3"},"nodeType":"ForStatement","src":"13499:1437:3"}]},"functionSelector":"07ac3562","implemented":true,"kind":"function","modifiers":[],"name":"validate_1deltaMulticall","nameLocation":"13309:24:3","parameters":{"id":1329,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1328,"mutability":"mutable","name":"callData","nameLocation":"13347:8:3","nodeType":"VariableDeclaration","scope":1468,"src":"13334:21:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1327,"name":"bytes","nodeType":"ElementaryTypeName","src":"13334:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"13333:23:3"},"returnParameters":{"id":1330,"nodeType":"ParameterList","parameters":[],"src":"13369:0:3"},"scope":1751,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":1493,"nodeType":"FunctionDefinition","src":"15133:208:3","nodes":[],"body":{"id":1492,"nodeType":"Block","src":"15202:139:3","nodes":[],"statements":[{"assignments":[1474,null],"declarations":[{"constant":false,"id":1474,"mutability":"mutable","name":"token","nameLocation":"15221:5:3","nodeType":"VariableDeclaration","scope":1492,"src":"15213:13:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1473,"name":"address","nodeType":"ElementaryTypeName","src":"15213:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},null],"id":1484,"initialValue":{"arguments":[{"id":1477,"name":"callData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1470,"src":"15243:8:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":1479,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15254:7:3","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1478,"name":"address","nodeType":"ElementaryTypeName","src":"15254:7:3","typeDescriptions":{}}},{"id":1481,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15263:7:3","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":1480,"name":"uint256","nodeType":"ElementaryTypeName","src":"15263:7:3","typeDescriptions":{}}}],"id":1482,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"15253:18:3","typeDescriptions":{"typeIdentifier":"t_tuple$_t_type$_t_address_$_$_t_type$_t_uint256_$_$","typeString":"tuple(type(address),type(uint256))"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_tuple$_t_type$_t_address_$_$_t_type$_t_uint256_$_$","typeString":"tuple(type(address),type(uint256))"}],"expression":{"id":1475,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"15232:3:3","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":1476,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"15236:6:3","memberName":"decode","nodeType":"MemberAccess","src":"15232:10:3","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":1483,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15232:40:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_payable_$_t_uint256_$","typeString":"tuple(address payable,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"15212:60:3"},{"expression":{"arguments":[{"arguments":[{"id":1487,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1474,"src":"15306:5:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1486,"name":"isAllowedAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":859,"src":"15291:14:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":1488,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15291:21:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"546f6b656e206e6f7420616c6c6f776564","id":1489,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"15314:19:3","typeDescriptions":{"typeIdentifier":"t_stringliteral_b318a5ee46f86f39aed1f4d1664d882d10cd5f107f7744b083b8f848bbae3c7b","typeString":"literal_string \"Token not allowed\""},"value":"Token not allowed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b318a5ee46f86f39aed1f4d1664d882d10cd5f107f7744b083b8f848bbae3c7b","typeString":"literal_string \"Token not allowed\""}],"id":1485,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"15283:7:3","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1490,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15283:51:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1491,"nodeType":"ExpressionStatement","src":"15283:51:3"}]},"functionSelector":"59b92be9","implemented":true,"kind":"function","modifiers":[],"name":"validate_transferERC20In","nameLocation":"15142:24:3","parameters":{"id":1471,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1470,"mutability":"mutable","name":"callData","nameLocation":"15180:8:3","nodeType":"VariableDeclaration","scope":1493,"src":"15167:21:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1469,"name":"bytes","nodeType":"ElementaryTypeName","src":"15167:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"15166:23:3"},"returnParameters":{"id":1472,"nodeType":"ParameterList","parameters":[],"src":"15202:0:3"},"scope":1751,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":1516,"nodeType":"FunctionDefinition","src":"15532:200:3","nodes":[],"body":{"id":1515,"nodeType":"Block","src":"15604:128:3","nodes":[],"statements":[{"assignments":[1499],"declarations":[{"constant":false,"id":1499,"mutability":"mutable","name":"token","nameLocation":"15623:5:3","nodeType":"VariableDeclaration","scope":1515,"src":"15615:13:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1498,"name":"address","nodeType":"ElementaryTypeName","src":"15615:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":1507,"initialValue":{"arguments":[{"id":1502,"name":"callData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1495,"src":"15643:8:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":1504,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15654:7:3","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1503,"name":"address","nodeType":"ElementaryTypeName","src":"15654:7:3","typeDescriptions":{}}}],"id":1505,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"15653:9:3","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"}],"expression":{"id":1500,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"15632:3:3","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":1501,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"15636:6:3","memberName":"decode","nodeType":"MemberAccess","src":"15632:10:3","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":1506,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15632:31:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"nodeType":"VariableDeclarationStatement","src":"15614:49:3"},{"expression":{"arguments":[{"arguments":[{"id":1510,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1499,"src":"15697:5:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1509,"name":"isAllowedAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":859,"src":"15682:14:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":1511,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15682:21:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"546f6b656e206e6f7420616c6c6f776564","id":1512,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"15705:19:3","typeDescriptions":{"typeIdentifier":"t_stringliteral_b318a5ee46f86f39aed1f4d1664d882d10cd5f107f7744b083b8f848bbae3c7b","typeString":"literal_string \"Token not allowed\""},"value":"Token not allowed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b318a5ee46f86f39aed1f4d1664d882d10cd5f107f7744b083b8f848bbae3c7b","typeString":"literal_string \"Token not allowed\""}],"id":1508,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"15674:7:3","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1513,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15674:51:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1514,"nodeType":"ExpressionStatement","src":"15674:51:3"}]},"functionSelector":"7ea44655","implemented":true,"kind":"function","modifiers":[],"name":"validate_transferERC20AllIn","nameLocation":"15541:27:3","parameters":{"id":1496,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1495,"mutability":"mutable","name":"callData","nameLocation":"15582:8:3","nodeType":"VariableDeclaration","scope":1516,"src":"15569:21:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1494,"name":"bytes","nodeType":"ElementaryTypeName","src":"15569:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"15568:23:3"},"returnParameters":{"id":1497,"nodeType":"ParameterList","parameters":[],"src":"15604:0:3"},"scope":1751,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":1550,"nodeType":"FunctionDefinition","src":"15927:305:3","nodes":[],"body":{"id":1549,"nodeType":"Block","src":"15988:244:3","nodes":[],"statements":[{"assignments":[1522,1524],"declarations":[{"constant":false,"id":1522,"mutability":"mutable","name":"token","nameLocation":"16007:5:3","nodeType":"VariableDeclaration","scope":1549,"src":"15999:13:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1521,"name":"address","nodeType":"ElementaryTypeName","src":"15999:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1524,"mutability":"mutable","name":"receiver","nameLocation":"16022:8:3","nodeType":"VariableDeclaration","scope":1549,"src":"16014:16:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1523,"name":"address","nodeType":"ElementaryTypeName","src":"16014:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":1534,"initialValue":{"arguments":[{"id":1527,"name":"callData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1518,"src":"16045:8:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":1529,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16056:7:3","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1528,"name":"address","nodeType":"ElementaryTypeName","src":"16056:7:3","typeDescriptions":{}}},{"id":1531,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16065:7:3","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1530,"name":"address","nodeType":"ElementaryTypeName","src":"16065:7:3","typeDescriptions":{}}}],"id":1532,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"16055:18:3","typeDescriptions":{"typeIdentifier":"t_tuple$_t_type$_t_address_$_$_t_type$_t_address_$_$","typeString":"tuple(type(address),type(address))"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_tuple$_t_type$_t_address_$_$_t_type$_t_address_$_$","typeString":"tuple(type(address),type(address))"}],"expression":{"id":1525,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"16034:3:3","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":1526,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"16038:6:3","memberName":"decode","nodeType":"MemberAccess","src":"16034:10:3","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":1533,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16034:40:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_payable_$_t_address_payable_$","typeString":"tuple(address payable,address payable)"}},"nodeType":"VariableDeclarationStatement","src":"15998:76:3"},{"expression":{"arguments":[{"arguments":[{"id":1537,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1522,"src":"16116:5:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1536,"name":"isAllowedAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":859,"src":"16101:14:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":1538,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16101:21:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"546f6b656e206e6f7420616c6c6f776564","id":1539,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"16124:19:3","typeDescriptions":{"typeIdentifier":"t_stringliteral_b318a5ee46f86f39aed1f4d1664d882d10cd5f107f7744b083b8f848bbae3c7b","typeString":"literal_string \"Token not allowed\""},"value":"Token not allowed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b318a5ee46f86f39aed1f4d1664d882d10cd5f107f7744b083b8f848bbae3c7b","typeString":"literal_string \"Token not allowed\""}],"id":1535,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"16093:7:3","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1540,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16093:51:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1541,"nodeType":"ExpressionStatement","src":"16093:51:3"},{"expression":{"arguments":[{"arguments":[{"id":1544,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1524,"src":"16180:8:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1543,"name":"isAllowedReceiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":803,"src":"16162:17:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":1545,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16162:27:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5265636569766572206164647265737320646f6573206e6f74206d61746368","id":1546,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"16191:33:3","typeDescriptions":{"typeIdentifier":"t_stringliteral_914992591b078845495b58c4516b430d9e17451e3f92fff3d4d5ee434bb6c65c","typeString":"literal_string \"Receiver address does not match\""},"value":"Receiver address does not match"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_914992591b078845495b58c4516b430d9e17451e3f92fff3d4d5ee434bb6c65c","typeString":"literal_string \"Receiver address does not match\""}],"id":1542,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"16154:7:3","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1547,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16154:71:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1548,"nodeType":"ExpressionStatement","src":"16154:71:3"}]},"functionSelector":"5e62deee","implemented":true,"kind":"function","modifiers":[],"name":"validate_deposit","nameLocation":"15936:16:3","parameters":{"id":1519,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1518,"mutability":"mutable","name":"callData","nameLocation":"15966:8:3","nodeType":"VariableDeclaration","scope":1550,"src":"15953:21:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1517,"name":"bytes","nodeType":"ElementaryTypeName","src":"15953:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"15952:23:3"},"returnParameters":{"id":1520,"nodeType":"ParameterList","parameters":[],"src":"15988:0:3"},"scope":1751,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":1584,"nodeType":"FunctionDefinition","src":"16408:306:3","nodes":[],"body":{"id":1583,"nodeType":"Block","src":"16470:244:3","nodes":[],"statements":[{"assignments":[1556,1558],"declarations":[{"constant":false,"id":1556,"mutability":"mutable","name":"token","nameLocation":"16489:5:3","nodeType":"VariableDeclaration","scope":1583,"src":"16481:13:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1555,"name":"address","nodeType":"ElementaryTypeName","src":"16481:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1558,"mutability":"mutable","name":"receiver","nameLocation":"16504:8:3","nodeType":"VariableDeclaration","scope":1583,"src":"16496:16:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1557,"name":"address","nodeType":"ElementaryTypeName","src":"16496:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":1568,"initialValue":{"arguments":[{"id":1561,"name":"callData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1552,"src":"16527:8:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":1563,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16538:7:3","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1562,"name":"address","nodeType":"ElementaryTypeName","src":"16538:7:3","typeDescriptions":{}}},{"id":1565,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16547:7:3","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1564,"name":"address","nodeType":"ElementaryTypeName","src":"16547:7:3","typeDescriptions":{}}}],"id":1566,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"16537:18:3","typeDescriptions":{"typeIdentifier":"t_tuple$_t_type$_t_address_$_$_t_type$_t_address_$_$","typeString":"tuple(type(address),type(address))"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_tuple$_t_type$_t_address_$_$_t_type$_t_address_$_$","typeString":"tuple(type(address),type(address))"}],"expression":{"id":1559,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"16516:3:3","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":1560,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"16520:6:3","memberName":"decode","nodeType":"MemberAccess","src":"16516:10:3","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":1567,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16516:40:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_payable_$_t_address_payable_$","typeString":"tuple(address payable,address payable)"}},"nodeType":"VariableDeclarationStatement","src":"16480:76:3"},{"expression":{"arguments":[{"arguments":[{"id":1571,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1556,"src":"16598:5:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1570,"name":"isAllowedAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":859,"src":"16583:14:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":1572,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16583:21:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"546f6b656e206e6f7420616c6c6f776564","id":1573,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"16606:19:3","typeDescriptions":{"typeIdentifier":"t_stringliteral_b318a5ee46f86f39aed1f4d1664d882d10cd5f107f7744b083b8f848bbae3c7b","typeString":"literal_string \"Token not allowed\""},"value":"Token not allowed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b318a5ee46f86f39aed1f4d1664d882d10cd5f107f7744b083b8f848bbae3c7b","typeString":"literal_string \"Token not allowed\""}],"id":1569,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"16575:7:3","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1574,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16575:51:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1575,"nodeType":"ExpressionStatement","src":"16575:51:3"},{"expression":{"arguments":[{"arguments":[{"id":1578,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1558,"src":"16662:8:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1577,"name":"isAllowedReceiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":803,"src":"16644:17:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":1579,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16644:27:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5265636569766572206164647265737320646f6573206e6f74206d61746368","id":1580,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"16673:33:3","typeDescriptions":{"typeIdentifier":"t_stringliteral_914992591b078845495b58c4516b430d9e17451e3f92fff3d4d5ee434bb6c65c","typeString":"literal_string \"Receiver address does not match\""},"value":"Receiver address does not match"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_914992591b078845495b58c4516b430d9e17451e3f92fff3d4d5ee434bb6c65c","typeString":"literal_string \"Receiver address does not match\""}],"id":1576,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"16636:7:3","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1581,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16636:71:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1582,"nodeType":"ExpressionStatement","src":"16636:71:3"}]},"functionSelector":"e9cd02e7","implemented":true,"kind":"function","modifiers":[],"name":"validate_withdraw","nameLocation":"16417:17:3","parameters":{"id":1553,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1552,"mutability":"mutable","name":"callData","nameLocation":"16448:8:3","nodeType":"VariableDeclaration","scope":1584,"src":"16435:21:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1551,"name":"bytes","nodeType":"ElementaryTypeName","src":"16435:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"16434:23:3"},"returnParameters":{"id":1554,"nodeType":"ParameterList","parameters":[],"src":"16470:0:3"},"scope":1751,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":1608,"nodeType":"FunctionDefinition","src":"16907:196:3","nodes":[],"body":{"id":1607,"nodeType":"Block","src":"16978:125:3","nodes":[],"statements":[{"assignments":[null,null,1590],"declarations":[null,null,{"constant":false,"id":1590,"mutability":"mutable","name":"path","nameLocation":"17006:4:3","nodeType":"VariableDeclaration","scope":1607,"src":"16993:17:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1589,"name":"bytes","nodeType":"ElementaryTypeName","src":"16993:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":1602,"initialValue":{"arguments":[{"id":1593,"name":"callData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1586,"src":"17025:8:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":1595,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"17036:7:3","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":1594,"name":"uint256","nodeType":"ElementaryTypeName","src":"17036:7:3","typeDescriptions":{}}},{"id":1597,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"17045:7:3","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":1596,"name":"uint256","nodeType":"ElementaryTypeName","src":"17045:7:3","typeDescriptions":{}}},{"id":1599,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"17054:5:3","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":1598,"name":"bytes","nodeType":"ElementaryTypeName","src":"17054:5:3","typeDescriptions":{}}}],"id":1600,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"17035:25:3","typeDescriptions":{"typeIdentifier":"t_tuple$_t_type$_t_uint256_$_$_t_type$_t_uint256_$_$_t_type$_t_bytes_storage_ptr_$_$","typeString":"tuple(type(uint256),type(uint256),type(bytes storage pointer))"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_tuple$_t_type$_t_uint256_$_$_t_type$_t_uint256_$_$_t_type$_t_bytes_storage_ptr_$_$","typeString":"tuple(type(uint256),type(uint256),type(bytes storage pointer))"}],"expression":{"id":1591,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"17014:3:3","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":1592,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"17018:6:3","memberName":"decode","nodeType":"MemberAccess","src":"17014:10:3","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":1601,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17014:47:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$","typeString":"tuple(uint256,uint256,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"16988:73:3"},{"expression":{"arguments":[{"id":1604,"name":"path","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1590,"src":"17091:4:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":1603,"name":"validate1deltaPath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1717,"src":"17072:18:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory) view"}},"id":1605,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17072:24:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1606,"nodeType":"ExpressionStatement","src":"17072:24:3"}]},"functionSelector":"ca963c50","implemented":true,"kind":"function","modifiers":[],"name":"validate_flashSwapExactInt","nameLocation":"16916:26:3","parameters":{"id":1587,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1586,"mutability":"mutable","name":"callData","nameLocation":"16956:8:3","nodeType":"VariableDeclaration","scope":1608,"src":"16943:21:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1585,"name":"bytes","nodeType":"ElementaryTypeName","src":"16943:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"16942:23:3"},"returnParameters":{"id":1588,"nodeType":"ParameterList","parameters":[],"src":"16978:0:3"},"scope":1751,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":1632,"nodeType":"FunctionDefinition","src":"17291:196:3","nodes":[],"body":{"id":1631,"nodeType":"Block","src":"17362:125:3","nodes":[],"statements":[{"assignments":[null,null,1614],"declarations":[null,null,{"constant":false,"id":1614,"mutability":"mutable","name":"path","nameLocation":"17390:4:3","nodeType":"VariableDeclaration","scope":1631,"src":"17377:17:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1613,"name":"bytes","nodeType":"ElementaryTypeName","src":"17377:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":1626,"initialValue":{"arguments":[{"id":1617,"name":"callData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1610,"src":"17409:8:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":1619,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"17420:7:3","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":1618,"name":"uint256","nodeType":"ElementaryTypeName","src":"17420:7:3","typeDescriptions":{}}},{"id":1621,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"17429:7:3","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":1620,"name":"uint256","nodeType":"ElementaryTypeName","src":"17429:7:3","typeDescriptions":{}}},{"id":1623,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"17438:5:3","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":1622,"name":"bytes","nodeType":"ElementaryTypeName","src":"17438:5:3","typeDescriptions":{}}}],"id":1624,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"17419:25:3","typeDescriptions":{"typeIdentifier":"t_tuple$_t_type$_t_uint256_$_$_t_type$_t_uint256_$_$_t_type$_t_bytes_storage_ptr_$_$","typeString":"tuple(type(uint256),type(uint256),type(bytes storage pointer))"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_tuple$_t_type$_t_uint256_$_$_t_type$_t_uint256_$_$_t_type$_t_bytes_storage_ptr_$_$","typeString":"tuple(type(uint256),type(uint256),type(bytes storage pointer))"}],"expression":{"id":1615,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"17398:3:3","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":1616,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"17402:6:3","memberName":"decode","nodeType":"MemberAccess","src":"17398:10:3","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":1625,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17398:47:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$","typeString":"tuple(uint256,uint256,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"17372:73:3"},{"expression":{"arguments":[{"id":1628,"name":"path","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1614,"src":"17475:4:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":1627,"name":"validate1deltaPath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1717,"src":"17456:18:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory) view"}},"id":1629,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17456:24:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1630,"nodeType":"ExpressionStatement","src":"17456:24:3"}]},"functionSelector":"6ad11353","implemented":true,"kind":"function","modifiers":[],"name":"validate_flashSwapExactOut","nameLocation":"17300:26:3","parameters":{"id":1611,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1610,"mutability":"mutable","name":"callData","nameLocation":"17340:8:3","nodeType":"VariableDeclaration","scope":1632,"src":"17327:21:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1609,"name":"bytes","nodeType":"ElementaryTypeName","src":"17327:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"17326:23:3"},"returnParameters":{"id":1612,"nodeType":"ParameterList","parameters":[],"src":"17362:0:3"},"scope":1751,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":1654,"nodeType":"FunctionDefinition","src":"17678:183:3","nodes":[],"body":{"id":1653,"nodeType":"Block","src":"17747:114:3","nodes":[],"statements":[{"assignments":[null,1638],"declarations":[null,{"constant":false,"id":1638,"mutability":"mutable","name":"path","nameLocation":"17773:4:3","nodeType":"VariableDeclaration","scope":1653,"src":"17760:17:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1637,"name":"bytes","nodeType":"ElementaryTypeName","src":"17760:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":1648,"initialValue":{"arguments":[{"id":1641,"name":"callData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1634,"src":"17792:8:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":1643,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"17803:7:3","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":1642,"name":"uint256","nodeType":"ElementaryTypeName","src":"17803:7:3","typeDescriptions":{}}},{"id":1645,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"17812:5:3","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":1644,"name":"bytes","nodeType":"ElementaryTypeName","src":"17812:5:3","typeDescriptions":{}}}],"id":1646,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"17802:16:3","typeDescriptions":{"typeIdentifier":"t_tuple$_t_type$_t_uint256_$_$_t_type$_t_bytes_storage_ptr_$_$","typeString":"tuple(type(uint256),type(bytes storage pointer))"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_tuple$_t_type$_t_uint256_$_$_t_type$_t_bytes_storage_ptr_$_$","typeString":"tuple(type(uint256),type(bytes storage pointer))"}],"expression":{"id":1639,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"17781:3:3","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":1640,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"17785:6:3","memberName":"decode","nodeType":"MemberAccess","src":"17781:10:3","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":1647,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17781:38:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_bytes_memory_ptr_$","typeString":"tuple(uint256,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"17757:62:3"},{"expression":{"arguments":[{"id":1650,"name":"path","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1638,"src":"17849:4:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":1649,"name":"validate1deltaPath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1717,"src":"17830:18:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory) view"}},"id":1651,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17830:24:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1652,"nodeType":"ExpressionStatement","src":"17830:24:3"}]},"functionSelector":"425f49d0","implemented":true,"kind":"function","modifiers":[],"name":"validate_flashSwapAllOut","nameLocation":"17687:24:3","parameters":{"id":1635,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1634,"mutability":"mutable","name":"callData","nameLocation":"17725:8:3","nodeType":"VariableDeclaration","scope":1654,"src":"17712:21:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1633,"name":"bytes","nodeType":"ElementaryTypeName","src":"17712:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"17711:23:3"},"returnParameters":{"id":1636,"nodeType":"ParameterList","parameters":[],"src":"17747:0:3"},"scope":1751,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":1717,"nodeType":"FunctionDefinition","src":"18402:689:3","nodes":[],"body":{"id":1716,"nodeType":"Block","src":"18461:630:3","nodes":[],"statements":[{"assignments":[1661],"declarations":[{"constant":false,"id":1661,"mutability":"mutable","name":"tokenIn","nameLocation":"18479:7:3","nodeType":"VariableDeclaration","scope":1716,"src":"18471:15:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1660,"name":"address","nodeType":"ElementaryTypeName","src":"18471:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":1662,"nodeType":"VariableDeclarationStatement","src":"18471:15:3"},{"assignments":[1664],"declarations":[{"constant":false,"id":1664,"mutability":"mutable","name":"tokenOut","nameLocation":"18504:8:3","nodeType":"VariableDeclaration","scope":1716,"src":"18496:16:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1663,"name":"address","nodeType":"ElementaryTypeName","src":"18496:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":1665,"nodeType":"VariableDeclarationStatement","src":"18496:16:3"},{"body":{"id":1714,"nodeType":"Block","src":"18536:549:3","statements":[{"expression":{"id":1672,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1667,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1661,"src":"18550:7:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"hexValue":"30","id":1670,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18575:1:3","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"}],"expression":{"id":1668,"name":"path","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1657,"src":"18560:4:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":1669,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18565:9:3","memberName":"toAddress","nodeType":"MemberAccess","referencedDeclaration":2037,"src":"18560:14:3","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_address_$attached_to$_t_bytes_memory_ptr_$","typeString":"function (bytes memory,uint256) pure returns (address)"}},"id":1671,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18560:17:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"18550:27:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1673,"nodeType":"ExpressionStatement","src":"18550:27:3"},{"expression":{"id":1679,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1674,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1664,"src":"18591:8:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":1677,"name":"ONEDELTA_NEXT_OFFSET","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":262,"src":"18617:20:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":1675,"name":"path","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1657,"src":"18602:4:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":1676,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18607:9:3","memberName":"toAddress","nodeType":"MemberAccess","referencedDeclaration":2037,"src":"18602:14:3","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_address_$attached_to$_t_bytes_memory_ptr_$","typeString":"function (bytes memory,uint256) pure returns (address)"}},"id":1678,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18602:36:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"18591:47:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1680,"nodeType":"ExpressionStatement","src":"18591:47:3"},{"expression":{"arguments":[{"arguments":[{"id":1683,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1661,"src":"18676:7:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1682,"name":"isAllowedAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":859,"src":"18661:14:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":1684,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18661:23:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"546f6b656e206e6f7420616c6c6f776564","id":1685,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"18686:19:3","typeDescriptions":{"typeIdentifier":"t_stringliteral_b318a5ee46f86f39aed1f4d1664d882d10cd5f107f7744b083b8f848bbae3c7b","typeString":"literal_string \"Token not allowed\""},"value":"Token not allowed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b318a5ee46f86f39aed1f4d1664d882d10cd5f107f7744b083b8f848bbae3c7b","typeString":"literal_string \"Token not allowed\""}],"id":1681,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"18653:7:3","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1686,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18653:53:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1687,"nodeType":"ExpressionStatement","src":"18653:53:3"},{"expression":{"arguments":[{"arguments":[{"id":1690,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1664,"src":"18743:8:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1689,"name":"isAllowedAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":859,"src":"18728:14:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":1691,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18728:24:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"546f6b656e206e6f7420616c6c6f776564","id":1692,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"18754:19:3","typeDescriptions":{"typeIdentifier":"t_stringliteral_b318a5ee46f86f39aed1f4d1664d882d10cd5f107f7744b083b8f848bbae3c7b","typeString":"literal_string \"Token not allowed\""},"value":"Token not allowed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b318a5ee46f86f39aed1f4d1664d882d10cd5f107f7744b083b8f848bbae3c7b","typeString":"literal_string \"Token not allowed\""}],"id":1688,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"18720:7:3","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1693,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18720:54:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1694,"nodeType":"ExpressionStatement","src":"18720:54:3"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1698,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":1695,"name":"path","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1657,"src":"18872:4:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":1696,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18877:6:3","memberName":"length","nodeType":"MemberAccess","src":"18872:11:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":1697,"name":"ONEDELTA_MULTIPLE_POOLS_MIN_LENGTH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":274,"src":"18887:34:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18872:49:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":1712,"nodeType":"Block","src":"19037:38:3","statements":[{"id":1711,"nodeType":"Break","src":"19055:5:3"}]},"id":1713,"nodeType":"IfStatement","src":"18868:207:3","trueBody":{"id":1710,"nodeType":"Block","src":"18923:108:3","statements":[{"expression":{"id":1708,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1699,"name":"path","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1657,"src":"18941:4:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":1702,"name":"ONEDELTA_NEXT_OFFSET","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":262,"src":"18959:20:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1706,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":1703,"name":"path","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1657,"src":"18981:4:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":1704,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18986:6:3","memberName":"length","nodeType":"MemberAccess","src":"18981:11:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":1705,"name":"ONEDELTA_NEXT_OFFSET","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":262,"src":"18995:20:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18981:34:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":1700,"name":"path","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1657,"src":"18948:4:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":1701,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18953:5:3","memberName":"slice","nodeType":"MemberAccess","referencedDeclaration":2002,"src":"18948:10:3","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bytes_memory_ptr_$attached_to$_t_bytes_memory_ptr_$","typeString":"function (bytes memory,uint256,uint256) pure returns (bytes memory)"}},"id":1707,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18948:68:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"src":"18941:75:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":1709,"nodeType":"ExpressionStatement","src":"18941:75:3"}]}}]},"condition":{"hexValue":"74727565","id":1666,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"18530:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"id":1715,"nodeType":"WhileStatement","src":"18523:562:3"}]},"documentation":{"id":1655,"nodeType":"StructuredDocumentation","src":"17867:530:3","text":" Our implementation of 1delta path decoding and validation using similar \n approach as Uniswap v3 `Path.sol`\n Read more:\n - How 1delta encodes the path: https://github.com/1delta-DAO/contracts-delegation/blob/4f27e1593c564c419ff042cdd932ed52d04216bf/test-ts/1delta/shared/aggregatorPath.ts#L5-L32\n - How 1delta decodes the path: https://github.com/1delta-DAO/contracts-delegation/blob/4f27e1593c564c419ff042cdd932ed52d04216bf/contracts/1delta/modules/aave/MarginTrading.sol#L54-L60"},"functionSelector":"a1b6b430","implemented":true,"kind":"function","modifiers":[],"name":"validate1deltaPath","nameLocation":"18411:18:3","parameters":{"id":1658,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1657,"mutability":"mutable","name":"path","nameLocation":"18443:4:3","nodeType":"VariableDeclaration","scope":1717,"src":"18430:17:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1656,"name":"bytes","nodeType":"ElementaryTypeName","src":"18430:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"18429:19:3"},"returnParameters":{"id":1659,"nodeType":"ParameterList","parameters":[],"src":"18461:0:3"},"scope":1751,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":1750,"nodeType":"FunctionDefinition","src":"19097:603:3","nodes":[],"body":{"id":1749,"nodeType":"Block","src":"19198:502:3","nodes":[],"statements":[{"expression":{"arguments":[{"id":1727,"name":"brokerProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1719,"src":"19222:11:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"6d756c746963616c6c2862797465735b5d29","id":1729,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"19247:20:3","typeDescriptions":{"typeIdentifier":"t_stringliteral_ac9650d882acfa253cba1ed543b9ff47351da99c3bd00a89625e5cdb2099009c","typeString":"literal_string \"multicall(bytes[])\""},"value":"multicall(bytes[])"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_ac9650d882acfa253cba1ed543b9ff47351da99c3bd00a89625e5cdb2099009c","typeString":"literal_string \"multicall(bytes[])\""}],"id":1728,"name":"getSelector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":440,"src":"19235:11:3","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes4_$","typeString":"function (string memory) pure returns (bytes4)"}},"id":1730,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19235:33:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":1731,"name":"notes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1723,"src":"19270:5:3","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}],"id":1726,"name":"allowCallSite","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":488,"src":"19208:13:3","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes4_$_t_string_calldata_ptr_$returns$__$","typeString":"function (address,bytes4,string calldata)"}},"id":1732,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19208:68:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1733,"nodeType":"ExpressionStatement","src":"19208:68:3"},{"expression":{"arguments":[{"id":1735,"name":"brokerProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1719,"src":"19311:11:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1736,"name":"notes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1723,"src":"19324:5:3","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}],"id":1734,"name":"allowApprovalDestination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":657,"src":"19286:24:3","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_string_calldata_ptr_$returns$__$","typeString":"function (address,string calldata)"}},"id":1737,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19286:44:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1738,"nodeType":"ExpressionStatement","src":"19286:44:3"},{"expression":{"arguments":[{"id":1740,"name":"lendingPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1721,"src":"19365:11:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1741,"name":"notes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1723,"src":"19378:5:3","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}],"id":1739,"name":"allowApprovalDestination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":657,"src":"19340:24:3","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_string_calldata_ptr_$returns$__$","typeString":"function (address,string calldata)"}},"id":1742,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19340:44:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1743,"nodeType":"ExpressionStatement","src":"19340:44:3"},{"expression":{"arguments":[{"id":1745,"name":"brokerProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1719,"src":"19674:11:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1746,"name":"notes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1723,"src":"19687:5:3","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}],"id":1744,"name":"allowDelegationApprovalDestination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":698,"src":"19639:34:3","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_string_calldata_ptr_$returns$__$","typeString":"function (address,string calldata)"}},"id":1747,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19639:54:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1748,"nodeType":"ExpressionStatement","src":"19639:54:3"}]},"functionSelector":"f26749f3","implemented":true,"kind":"function","modifiers":[],"name":"whitelistOnedelta","nameLocation":"19106:17:3","parameters":{"id":1724,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1719,"mutability":"mutable","name":"brokerProxy","nameLocation":"19132:11:3","nodeType":"VariableDeclaration","scope":1750,"src":"19124:19:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1718,"name":"address","nodeType":"ElementaryTypeName","src":"19124:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1721,"mutability":"mutable","name":"lendingPool","nameLocation":"19153:11:3","nodeType":"VariableDeclaration","scope":1750,"src":"19145:19:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1720,"name":"address","nodeType":"ElementaryTypeName","src":"19145:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1723,"mutability":"mutable","name":"notes","nameLocation":"19182:5:3","nodeType":"VariableDeclaration","scope":1750,"src":"19166:21:3","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":1722,"name":"string","nodeType":"ElementaryTypeName","src":"19166:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"19123:65:3"},"returnParameters":{"id":1725,"nodeType":"ParameterList","parameters":[],"src":"19198:0:3"},"scope":1751,"stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"abstract":false,"baseContracts":[{"baseName":{"id":227,"name":"IGuard","nameLocations":["292:6:3"],"nodeType":"IdentifierPath","referencedDeclaration":1763,"src":"292:6:3"},"id":228,"nodeType":"InheritanceSpecifier","src":"292:6:3"},{"baseName":{"id":229,"name":"Ownable","nameLocations":["300:7:3"],"nodeType":"IdentifierPath","referencedDeclaration":112,"src":"300:7:3"},"id":230,"nodeType":"InheritanceSpecifier","src":"300:7:3"}],"canonicalName":"GuardV0","contractDependencies":[],"contractKind":"contract","documentation":{"id":226,"nodeType":"StructuredDocumentation","src":"173:98:3","text":" Prototype guard implementation.\n - Hardcoded actions for Uniswap v2, v3, 1delta"},"fullyImplemented":true,"linearizedBaseContracts":[1751,112,220,1763],"name":"GuardV0","nameLocation":"281:7:3","scope":1752,"usedErrors":[],"usedEvents":[13,336,344,350,356,362,368,374,380,386,392,398,404,410,416]}]},"id":3} \ No newline at end of file +{"abi":[{"type":"constructor","inputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"allowApprovalDestination","inputs":[{"name":"destination","type":"address","internalType":"address"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"allowAsset","inputs":[{"name":"asset","type":"address","internalType":"address"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"allowCallSite","inputs":[{"name":"target","type":"address","internalType":"address"},{"name":"selector","type":"bytes4","internalType":"bytes4"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"allowDelegationApprovalDestination","inputs":[{"name":"destination","type":"address","internalType":"address"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"allowReceiver","inputs":[{"name":"receiver","type":"address","internalType":"address"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"allowSender","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"allowWithdrawDestination","inputs":[{"name":"destination","type":"address","internalType":"address"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"allowedApprovalDestinations","inputs":[{"name":"destination","type":"address","internalType":"address"}],"outputs":[{"name":"allowed","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"allowedAssets","inputs":[{"name":"token","type":"address","internalType":"address"}],"outputs":[{"name":"allowed","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"allowedCallSites","inputs":[{"name":"target","type":"address","internalType":"address"},{"name":"selector","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"allowed","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"allowedDelegationApprovalDestinations","inputs":[{"name":"destination","type":"address","internalType":"address"}],"outputs":[{"name":"allowed","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"allowedReceivers","inputs":[{"name":"receiver","type":"address","internalType":"address"}],"outputs":[{"name":"allowed","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"allowedSenders","inputs":[{"name":"sender","type":"address","internalType":"address"}],"outputs":[{"name":"allowed","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"allowedWithdrawDestinations","inputs":[{"name":"destination","type":"address","internalType":"address"}],"outputs":[{"name":"allowed","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"callSiteCount","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getGovernanceAddress","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"getInternalVersion","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"uint8"}],"stateMutability":"pure"},{"type":"function","name":"isAllowedApprovalDestination","inputs":[{"name":"receiver","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isAllowedAsset","inputs":[{"name":"token","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isAllowedCallSite","inputs":[{"name":"target","type":"address","internalType":"address"},{"name":"selector","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isAllowedDelegationApprovalDestination","inputs":[{"name":"receiver","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isAllowedReceiver","inputs":[{"name":"receiver","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isAllowedSender","inputs":[{"name":"sender","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isAllowedWithdrawDestination","inputs":[{"name":"receiver","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"removeApprovalDestination","inputs":[{"name":"destination","type":"address","internalType":"address"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"removeAsset","inputs":[{"name":"asset","type":"address","internalType":"address"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"removeCallSite","inputs":[{"name":"target","type":"address","internalType":"address"},{"name":"selector","type":"bytes4","internalType":"bytes4"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"removeDelegationApprovalDestination","inputs":[{"name":"destination","type":"address","internalType":"address"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"removeReceiver","inputs":[{"name":"receiver","type":"address","internalType":"address"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"removeSender","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"removeWithdrawDestination","inputs":[{"name":"destination","type":"address","internalType":"address"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"validate1deltaPath","inputs":[{"name":"path","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"validateCall","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"target","type":"address","internalType":"address"},{"name":"callDataWithSelector","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"validateUniswapV3Path","inputs":[{"name":"path","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"validate_1deltaDeposit","inputs":[{"name":"callData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"validate_1deltaMulticall","inputs":[{"name":"callData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"validate_1deltaWithdraw","inputs":[{"name":"callData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"validate_aaveSupply","inputs":[{"name":"callData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"validate_aaveWithdraw","inputs":[{"name":"callData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"validate_approve","inputs":[{"name":"callData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"validate_approveDelegation","inputs":[{"name":"callData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"validate_exactInput","inputs":[{"name":"callData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"validate_exactOutput","inputs":[{"name":"callData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"validate_flashSwapAllOut","inputs":[{"name":"callData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"validate_flashSwapExactInt","inputs":[{"name":"callData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"validate_flashSwapExactOut","inputs":[{"name":"callData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"validate_swapExactTokensForTokens","inputs":[{"name":"callData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"validate_transfer","inputs":[{"name":"callData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"validate_transferERC20AllIn","inputs":[{"name":"callData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"validate_transferERC20In","inputs":[{"name":"callData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"whitelistAaveV3","inputs":[{"name":"lendingPool","type":"address","internalType":"address"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"whitelistOnedelta","inputs":[{"name":"brokerProxy","type":"address","internalType":"address"},{"name":"lendingPool","type":"address","internalType":"address"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"whitelistToken","inputs":[{"name":"token","type":"address","internalType":"address"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"whitelistTokenForDelegation","inputs":[{"name":"token","type":"address","internalType":"address"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"whitelistUniswapV2Router","inputs":[{"name":"router","type":"address","internalType":"address"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"whitelistUniswapV3Router","inputs":[{"name":"router","type":"address","internalType":"address"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"ApprovalDestinationApproved","inputs":[{"name":"sender","type":"address","indexed":false,"internalType":"address"},{"name":"notes","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"ApprovalDestinationRemoved","inputs":[{"name":"sender","type":"address","indexed":false,"internalType":"address"},{"name":"notes","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"AssetApproved","inputs":[{"name":"sender","type":"address","indexed":false,"internalType":"address"},{"name":"notes","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"AssetRemoved","inputs":[{"name":"sender","type":"address","indexed":false,"internalType":"address"},{"name":"notes","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"CallSiteApproved","inputs":[{"name":"target","type":"address","indexed":false,"internalType":"address"},{"name":"selector","type":"bytes4","indexed":false,"internalType":"bytes4"},{"name":"notes","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"CallSiteRemoved","inputs":[{"name":"target","type":"address","indexed":false,"internalType":"address"},{"name":"selector","type":"bytes4","indexed":false,"internalType":"bytes4"},{"name":"notes","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"DelegationApprovalDestinationApproved","inputs":[{"name":"sender","type":"address","indexed":false,"internalType":"address"},{"name":"notes","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"DelegationApprovalDestinationRemoved","inputs":[{"name":"sender","type":"address","indexed":false,"internalType":"address"},{"name":"notes","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"ReceiverApproved","inputs":[{"name":"sender","type":"address","indexed":false,"internalType":"address"},{"name":"notes","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"ReceiverRemoved","inputs":[{"name":"sender","type":"address","indexed":false,"internalType":"address"},{"name":"notes","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"SenderApproved","inputs":[{"name":"sender","type":"address","indexed":false,"internalType":"address"},{"name":"notes","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"SenderRemoved","inputs":[{"name":"sender","type":"address","indexed":false,"internalType":"address"},{"name":"notes","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"WithdrawDestinationApproved","inputs":[{"name":"sender","type":"address","indexed":false,"internalType":"address"},{"name":"notes","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"WithdrawDestinationRemoved","inputs":[{"name":"sender","type":"address","indexed":false,"internalType":"address"},{"name":"notes","type":"string","indexed":false,"internalType":"string"}],"anonymous":false}],"bytecode":{"object":"0x608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6132c2806200007f6000396000f3fe608060405234801561001057600080fd5b50600436106103995760003560e01c80638c2fdf9e116101e9578063d7334c9d1161010f578063f259a073116100ad578063f901dc331161007c578063f901dc3314610890578063fa2c59c8146108a3578063fadbcf48146108b6578063fdedfa27146108d957600080fd5b8063f259a0731461039e578063f26749f314610857578063f2fde38b1461086a578063f76081e41461087d57600080fd5b8063ebe26816116100e9578063ebe26816146107ed578063ee5462cc14610800578063efb47bff14610813578063f20e85e01461084457600080fd5b8063d7334c9d146107a4578063e98539c5146107b7578063eb0de042146107ca57600080fd5b8063a847cf4d11610187578063c537bed011610156578063c537bed01461076b578063ca963c501461058a578063d075f9bb1461077e578063d4c0fe451461079157600080fd5b8063a847cf4d146106e2578063a9fc3d4f14610710578063be8c97b014610727578063c4cc9dba1461075857600080fd5b806398b3cc39116101c357806398b3cc3914610686578063a1b6b43014610699578063a4c1cccb146106ac578063a67e1f54146106cf57600080fd5b80638c2fdf9e1461064f5780638da5cb5b14610662578063957dc6c01461067357600080fd5b806359b92be9116102ce5780636d9a14231161026c578063732524941161023b57806373252494146105f1578063761bcd9c146106165780637ea446551461062957806386b6dbe51461063c57600080fd5b80636d9a1423146105b0578063713ebf3b146105c3578063715018a6146105d657806372e548a9146105de57600080fd5b806363cc17f2116102a857806363cc17f2146105645780636a6d5cc8146105775780636ad113531461058a5780636d5025f11461059d57600080fd5b806359b92be91461052b5780635ace1d921461053e5780635e4ccace1461055157600080fd5b80632dc32a611161033b5780633ea35551116103155780633ea35551146104cf578063425f49d0146104e25780634b941268146104f55780634b956bd81461051857600080fd5b80632dc32a611461046857806334ec8d7e146104995780633cf20025146104ac57600080fd5b80631710a4f2116103775780631710a4f2146103fe5780631c123e77146104115780631d49039c146104245780632d12d7881461045557600080fd5b806304a3ba251461039e57806307ac3562146103b357806307ef00cf146103c6575b600080fd5b6103b16103ac3660046127c0565b6108e8565b005b6103b16103c1366004612881565b610951565b6103e96103d4366004612900565b60066020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6103b161040c366004612881565b610c92565b6103b161041f366004612881565b610d48565b6103e9610432366004612900565b6001600160a01b031660009081526007602052604090205460ff16151560011490565b6103b16104633660046127c0565b610dc2565b6103e9610476366004612900565b6001600160a01b031660009081526008602052604090205460ff16151560011490565b6103b16104a73660046127c0565b610e1e565b6103e96104ba366004612900565b60056020526000908152604090205460ff1681565b6103b16104dd3660046127c0565b610e86565b6103b16104f0366004612881565b610eb1565b6103e9610503366004612900565b60086020526000908152604090205460ff1681565b6103b1610526366004612881565b610ed3565b6103b1610539366004612881565b610f78565b6103b161054c3660046127c0565b610ffa565b6103b161055f366004612941565b611059565b6103b16105723660046127c0565b6110ef565b6103b1610585366004612881565b61114e565b6103b1610598366004612881565b6111f6565b6103b16105ab3660046129a3565b611219565b6103b16105be3660046127c0565b611798565b6103e96105d13660046129d4565b6117ce565b6103b1611806565b6103b16105ec3660046127c0565b61181a565b6000546001600160a01b03165b6040516001600160a01b0390911681526020016103f5565b6103b1610624366004612881565b611879565b6103b1610637366004612881565b611984565b6103b161064a3660046127c0565b6119c1565b6103b161065d3660046127c0565b611a20565b6000546001600160a01b03166105fe565b6103b1610681366004612881565b611a7c565b6103b16106943660046127c0565b611b3c565b6103b16106a7366004612881565b611b9b565b6103e96106ba366004612900565b60036020526000908152604090205460ff1681565b6103b16106dd3660046127c0565b611ce3565b6103e96106f03660046129d4565b600160209081526000928352604080842090915290825290205460ff1681565b61071960025481565b6040519081526020016103f5565b6103e9610735366004612900565b6001600160a01b031660009081526004602052604090205460ff16151560011490565b6103b1610766366004612881565b611d3f565b6103e9610779366004612900565b611dfa565b6103e961078c366004612900565b611e1d565b6103b161079f366004612881565b611e40565b6103b16107b2366004612941565b611e80565b6103b16107c5366004612881565b611ef3565b6103e96107d8366004612900565b60076020526000908152604090205460ff1681565b6103b16107fb366004612881565b611f95565b6103b161080e3660046127c0565b61202c565b6103e9610821366004612900565b6001600160a01b031660009081526006602052604090205460ff16151560011490565b6103b16108523660046127c0565b6120e1565b6103b16108653660046129a3565b612137565b6103b1610878366004612900565b6121ac565b6103b161088b366004612881565b612225565b6103b161089e3660046127c0565b6122a1565b6103b16108b13660046127c0565b6122fd565b6103e96108c4366004612900565b60046020526000908152604090205460ff1681565b604051600181526020016103f5565b6108f061235c565b6001600160a01b03831660009081526007602052604090819020805460ff19169055517fb71be9befd3ac90c1c9981d3b1161b3c2c6dcd741f13b34061aa251226a802df9061094490859085908590612a32565b60405180910390a1505050565b6000818060200190518101906109679190612aec565b905060005b8151811015610c8d57600082828151811061098957610989612b9c565b6020026020010151905060006109ac60006004846123b69092919063ffffffff16565b6109b590612bb2565b905060006109d360048085516109cb9190612bff565b8591906123b6565b6040805180820190915260208082527f7472616e736665724552433230496e28616464726573732c75696e74323536299101529050631dac092b60e11b6001600160e01b0319831601610a2e57610a2981610f78565b610c82565b60408051808201909152601b81527f7472616e736665724552433230416c6c496e2861646472657373290000000000602090910152635cf59cb760e11b6001600160e01b0319831601610a8457610a2981611984565b60408051808201909152601881527f6465706f73697428616464726573732c6164647265737329000000000000000060209091015262d3ec1f60e31b6001600160e01b0319831601610ad957610a2981611d3f565b60408051808201909152601981527f776974686472617728616464726573732c6164647265737329000000000000006020909101526306bf1c7b60e01b6001600160e01b0319831601610b2f57610a2981612225565b610b5660405180606001604052806027815260200161323260279139805160209091012090565b6001600160e01b031916826001600160e01b03191603610b7957610a29816111f6565b610ba060405180606001604052806028815260200161320a60289139805160209091012090565b6001600160e01b031916826001600160e01b03191603610bc357610a29816111f6565b60408051808201909152601e81527f666c61736853776170416c6c4f75742875696e743235362c627974657329000060209091015263d2b3d16560e01b6001600160e01b0319831601610c1957610a2981610eb1565b60405162461bcd60e51b815260206004820152603360248201527f76616c69646174655f3164656c74614d756c746963616c6c3a20556e6b6e6f776044820152723710333ab731ba34b7b71039b2b632b1ba37b960691b60648201526084015b60405180910390fd5b50505060010161096c565b505050565b600081806020019051810190610ca89190612c1d565b509050610cd2816001600160a01b031660009081526006602052604090205460ff16151560011490565b610d445760405162461bcd60e51b815260206004820152603c60248201527f76616c69646174655f7472616e736665723a205265636569766572206164647260448201527f657373206e6f742077686974656c6973746564206279204775617264000000006064820152608401610c79565b5050565b6000805b610d558361250d565b5092509050610d6382611dfa565b610d7f5760405162461bcd60e51b8152600401610c7990612c4b565b610d8881611dfa565b610da45760405162461bcd60e51b8152600401610c7990612c4b565b610dad83612549565b15610c8d57610dbb83612583565b9250610d4c565b610dca61235c565b6001600160a01b03831660009081526005602052604090819020805460ff19169055517f4e13b11ab98e672bd78295ef9cebe764dc617f95decf47d842c25b83abc0c7249061094490859085908590612a32565b610e5083610e496040518060600160405280603381526020016131d760339139805160209091012090565b8484611059565b610e7b83610e4960405180606001604052806034815260200161325960349139805160209091012090565b610c8d838383611b3c565b610e7b83610e4960405180608001604052806043815260200161312b60439139805160209091012090565b600081806020019051810190610ec79190612c93565b915050610d4481611b9b565b600081806020019051810190610ee99190612c1d565b509050610f13816001600160a01b031660009081526007602052604090205460ff16151560011490565b610d445760405162461bcd60e51b815260206004820152603060248201527f76616c69646174655f617070726f76653a20417070726f76652061646472657360448201526f0e640c8decae640dcdee840dac2e8c6d60831b6064820152608401610c79565b600081806020019051810190610f8e9190612c1d565b509050610f9a81611dfa565b610d445760405162461bcd60e51b815260206004820152602b60248201527f76616c69646174655f7472616e736665724552433230496e3a20546f6b656e2060448201526a1b9bdd08185b1b1bddd95960aa1b6064820152608401610c79565b61100261235c565b6001600160a01b03831660009081526006602052604090819020805460ff19166001179055517f3562181221a42a19ddd03a82dfe06acab1905ceb65cdaf7d86a1d9fec66435529061094490859085908590612a32565b61106161235c565b6001600160a01b03841660009081526001602081815260408084206001600160e01b0319881685529091528220805460ff1916909117905560028054916110a783612cd9565b91905055507fef729aaa41b9fd994f9ff7c1960df214a84f722002e6cfbea31799cd0873a3ef848484846040516110e19493929190612cf2565b60405180910390a150505050565b6110f761235c565b6001600160a01b03831660009081526008602052604090819020805460ff19166001179055517f628a44970c0e450415e3ae74334ea44f3307b74dbf677a1371190242bf2f35899061094490859085908590612a32565b600080828060200190518101906111659190612d31565b925050915061117382611dfa565b61118f5760405162461bcd60e51b8152600401610c7990612d74565b61119881611e1d565b610c8d5760405162461bcd60e51b815260206004820152602960248201527f52656365697665722061646472657373206e6f742077686974656c697374656460448201526808189e4811dd585c9960ba1b6064820152608401610c79565b60008180602001905181019061120c9190612d9f565b92505050610d4481611b9b565b6000546001600160a01b0385811691161461179257611255846001600160a01b031660009081526004602052604090205460ff16151560011490565b6112a15760405162461bcd60e51b815260206004820181905260248201527f76616c696461746543616c6c3a2053656e646572206e6f7420616c6c6f7765646044820152606401610c79565b60006112b06004828486612dee565b6112b991612e18565b90503660006112cb8460048188612dee565b915091506112d986846117ce565b6113315760405162461bcd60e51b815260206004820152602360248201527f76616c696461746543616c6c3a2043616c6c2073697465206e6f7420616c6c6f6044820152621dd95960ea1b6064820152608401610c79565b61135860405180608001604052806043815260200161312b60439139805160209091012090565b6001600160e01b031916836001600160e01b031916036113b6576113b182828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061187992505050565b61178e565b6113dd6040518060600160405280603381526020016131d760339139805160209091012090565b6001600160e01b031916836001600160e01b03191603611436576113b182828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f9592505050565b6040805180820190915260128152716d756c746963616c6c2862797465735b5d2960701b602090910152630a6d35e560e31b6001600160e01b03198416016114b7576113b182828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061095192505050565b6040805180820190915260198152787472616e7366657228616464726573732c75696e743235362960381b6020909101526356fa634560e01b6001600160e01b031984160161153f576113b182828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610c9292505050565b604080518082019091526018815277617070726f766528616464726573732c75696e743235362960401b60209091015263f6a1584d60e01b6001600160e01b03198416016115c6576113b182828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610ed392505050565b6115ed6040518060600160405280602281526020016131b560229139805160209091012090565b6001600160e01b031916836001600160e01b03191603611646576113b182828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a7c92505050565b61166d60405180606001604052806026815260200161316e60269139805160209091012090565b6001600160e01b031916836001600160e01b031916036116c6576113b182828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611e4092505050565b6116ed60405180606001604052806021815260200161319460219139805160209091012090565b6001600160e01b031916836001600160e01b03191603611746576113b182828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061114e92505050565b60405162461bcd60e51b815260206004820152601960248201527f556e6b6e6f776e2066756e6374696f6e2073656c6563746f72000000000000006044820152606401610c79565b5050505b50505050565b6117c383610e496040518060600160405280602281526020016131b560229139805160209091012090565b610c8d8383836119c1565b6001600160a01b03821660009081526001602090815260408083206001600160e01b03198516845290915290205460ff165b92915050565b61180e61235c565b61181860006125b4565b565b61182261235c565b6001600160a01b03831660009081526005602052604090819020805460ff19166001179055517f62dd88c5ecfa60713a657640ebec4de26fc1aefa4afdb24e6d15a124fce727799061094490859085908590612a32565b600080828060200190518101906118909190612e48565b509350935050506118a081611e1d565b6119275760405162461bcd60e51b815260206004820152604c60248201527f76616c69646174655f737761704578616374546f6b656e73466f72546f6b656e60448201527f733a2052656365697665722061646472657373206e6f742077686974656c697360648201526b1d195908189e4811dd585c9960a21b608482015260a401610c79565b6000805b835181101561197d5783818151811061194657611946612b9c565b6020026020010151915061195982611dfa565b6119755760405162461bcd60e51b8152600401610c7990612d74565b60010161192b565b5050505050565b60008180602001905181019061199a9190612f11565b90506119a581611dfa565b610d445760405162461bcd60e51b8152600401610c7990612f2e565b6119c961235c565b6001600160a01b03831660009081526003602052604090819020805460ff19166001179055517fad90e2570fc4fe9f7437be3188d5c791c6662892d31731992aa88f5c876219839061094490859085908590612a32565b611a2861235c565b6001600160a01b03831660009081526006602052604090819020805460ff19169055517f1212f8ddb39de8e1a339460c95752d61100723efeaa34ccd94bca94393f409389061094490859085908590612a32565b600081806020019051810190611a929190612c1d565b509050611abc816001600160a01b031660009081526008602052604090205460ff16151560011490565b610d445760405162461bcd60e51b815260206004820152604560248201527f76616c69646174655f617070726f766544656c65676174696f6e3a204170707260448201527f6f76652064656c65676174696f6e206164647265737320646f6573206e6f74206064820152640dac2e8c6d60db1b608482015260a401610c79565b611b4461235c565b6001600160a01b03831660009081526007602052604090819020805460ff19166001179055517f628a44970c0e450415e3ae74334ea44f3307b74dbf677a1371190242bf2f35899061094490859085908590612a32565b6000805b611baa836000612604565b9150611bd9600180611bbe60036014612f7c565b611bc89190612f7c565b611bd29190612f7c565b8490612604565b9050611be482611dfa565b611c005760405162461bcd60e51b8152600401610c7990612f8f565b611c0981611dfa565b611c255760405162461bcd60e51b8152600401610c7990612f8f565b600180611c3460036014612f7c565b611c3e9190612f7c565b611c489190612f7c565b6014600180611c58600384612f7c565b611c629190612f7c565b611c6c9190612f7c565b611c769190612f7c565b611c809190612f7c565b835110610c8d57611cdc600180611c9960036014612f7c565b611ca39190612f7c565b611cad9190612f7c565b600180611cbc60036014612f7c565b611cc69190612f7c565b611cd09190612f7c565b85516109cb9190612bff565b9250611b9f565b611ceb61235c565b6001600160a01b03831660009081526004602052604090819020805460ff19169055517f3097928509c53a2dab9500431201d82b0d756e8f890fd01f4ae6b33b45687ea49061094490859085908590612a32565b60008082806020019051810190611d569190612fd4565b91509150611d6382611dfa565b611d7f5760405162461bcd60e51b8152600401610c7990612f2e565b611d8881611e1d565b610c8d5760405162461bcd60e51b815260206004820152603b60248201527f76616c69646174655f6465706f7369743a20526563656976657220616464726560448201527f7373206e6f742077686974656c697374656420627920477561726400000000006064820152608401610c79565b6001600160a01b031660009081526003602052604090205460ff16151560011490565b6001600160a01b031660009081526005602052604090205460ff16151560011490565b600081806020019051810190611e56919061300e565b5050509050611e6481611dfa565b610d445760405162461bcd60e51b8152600401610c7990612d74565b611e8861235c565b6001600160a01b03841660009081526001602090815260408083206001600160e01b03198716845290915290819020805460ff19169055517f37ea10f2d08f5a9803dfcd5abf3cfc7b0d6fcdf5fcbc36be9ea5a0b53d9a4d9b906110e1908690869086908690612cf2565b600081806020019051810190611f0991906130ee565b9050611f188160200151611e1d565b611f8a5760405162461bcd60e51b815260206004820152603f60248201527f76616c69646174655f65786163744f75747075743a205265636569766572206160448201527f646472657373206e6f742077686974656c6973746564206279204775617264006064820152608401610c79565b8051610d4490610d48565b600081806020019051810190611fab91906130ee565b9050611fba8160200151611e1d565b611f8a5760405162461bcd60e51b815260206004820152603e60248201527f76616c69646174655f6578616374496e7075743a20526563656976657220616460448201527f6472657373206e6f742077686974656c697374656420627920477561726400006064820152608401610c79565b6040805180820190915260198152787472616e7366657228616464726573732c75696e743235362960381b602090910152612087837fa9059cbb2ab09eb219583f4a59a5d0623ade346d962bcd4e46b11da047c9049b610e49565b604080518082019091526018815277617070726f766528616464726573732c75696e743235362960401b6020909101526117c3837f095ea7b334ae44009aa867bfb386f5c3b4b443ac6f0ee573fa91c4608fbadfba610e49565b61210c83610e4960405180606001604052806026815260200161316e60269139805160209091012090565b610e7b83610e4960405180606001604052806021815260200161319460219139805160209091012090565b6040805180820190915260128152716d756c746963616c6c2862797465735b5d2960701b60209091015261218b847fac9650d882acfa253cba1ed543b9ff47351da99c3bd00a89625e5cdb2099009c610e49565b612196848383611b3c565b6121a1838383611b3c565b6117928483836110ef565b6121b461235c565b6001600160a01b0381166122195760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c79565b612222816125b4565b50565b6000808280602001905181019061223c9190612fd4565b9150915061224982611dfa565b611d7f5760405162461bcd60e51b8152602060048201526024808201527f76616c69646174655f77697468647261773a20546f6b656e206e6f7420616c6c6044820152631bddd95960e21b6064820152608401610c79565b6122a961235c565b6001600160a01b03831660009081526003602052604090819020805460ff19169055517f9ca3f065622f5f03f32b7157677a0e420c3a36ab45fd49f256ffebce3e3105879061094490859085908590612a32565b61230561235c565b6001600160a01b03831660009081526004602052604090819020805460ff19166001179055517fa8f9caaf4861720900294428e4ff34d37070c37afd26d96e6e4da75326d2c3ad9061094490859085908590612a32565b6000546001600160a01b031633146118185760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c79565b6060816123c481601f612f7c565b10156124035760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b6044820152606401610c79565b8261240e8382612f7c565b101561244d5760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b6044820152606401610c79565b6124578284612f7c565b8451101561249b5760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b6044820152606401610c79565b6060821580156124ba5760405191506000825260208201604052612504565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156124f35780518352602092830192016124db565b5050858452601f01601f1916604052505b50949350505050565b6000808061251b8482612604565b92506125288460146126b8565b905061254061253960036014612f7c565b8590612604565b91509193909250565b600061255760036014612f7c565b6014612564600382612f7c565b61256e9190612f7c565b6125789190612f7c565b825110159050919050565b606061180061259460036014612f7c565b6125a060036014612f7c565b84516125ac9190612bff565b8491906123b6565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600081612612816014612f7c565b10156126555760405162461bcd60e51b8152602060048201526012602482015271746f416464726573735f6f766572666c6f7760701b6044820152606401610c79565b612660826014612f7c565b835110156126a85760405162461bcd60e51b8152602060048201526015602482015274746f416464726573735f6f75744f66426f756e647360581b6044820152606401610c79565b500160200151600160601b900490565b6000816126c6816003612f7c565b10156127085760405162461bcd60e51b8152602060048201526011602482015270746f55696e7432345f6f766572666c6f7760781b6044820152606401610c79565b612713826003612f7c565b8351101561275a5760405162461bcd60e51b8152602060048201526014602482015273746f55696e7432345f6f75744f66426f756e647360601b6044820152606401610c79565b50016003015190565b6001600160a01b038116811461222257600080fd5b60008083601f84011261278a57600080fd5b5081356001600160401b038111156127a157600080fd5b6020830191508360208285010111156127b957600080fd5b9250929050565b6000806000604084860312156127d557600080fd5b83356127e081612763565b925060208401356001600160401b038111156127fb57600080fd5b61280786828701612778565b9497909650939450505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561285257612852612814565b604052919050565b60006001600160401b0382111561287357612873612814565b50601f01601f191660200190565b60006020828403121561289357600080fd5b81356001600160401b038111156128a957600080fd5b8201601f810184136128ba57600080fd5b80356128cd6128c88261285a565b61282a565b8181528560208385010111156128e257600080fd5b81602084016020830137600091810160200191909152949350505050565b60006020828403121561291257600080fd5b813561291d81612763565b9392505050565b80356001600160e01b03198116811461293c57600080fd5b919050565b6000806000806060858703121561295757600080fd5b843561296281612763565b935061297060208601612924565b925060408501356001600160401b0381111561298b57600080fd5b61299787828801612778565b95989497509550505050565b600080600080606085870312156129b957600080fd5b84356129c481612763565b9350602085013561297081612763565b600080604083850312156129e757600080fd5b82356129f281612763565b9150612a0060208401612924565b90509250929050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b0384168152604060208201819052600090612a579083018486612a09565b95945050505050565b60006001600160401b03821115612a7957612a79612814565b5060051b60200190565b600082601f830112612a9457600080fd5b8151612aa26128c88261285a565b8181526020856020848701011115612ab957600080fd5b60005b83811015612ad7578581018201518382018301528101612abc565b50506000918101602001919091529392505050565b60006020808385031215612aff57600080fd5b82516001600160401b0380821115612b1657600080fd5b818501915085601f830112612b2a57600080fd5b8151612b386128c882612a60565b81815260059190911b83018401908481019088831115612b5757600080fd5b8585015b83811015612b8f57805185811115612b735760008081fd5b612b818b89838a0101612a83565b845250918601918601612b5b565b5098975050505050505050565b634e487b7160e01b600052603260045260246000fd5b805160208201516001600160e01b03198082169291906004831015612be15780818460040360031b1b83161693505b505050919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561180057611800612be9565b805161293c81612763565b60008060408385031215612c3057600080fd5b8251612c3b81612763565b6020939093015192949293505050565b60208082526028908201527f76616c6964617465556e69737761705633506174683a20546f6b656e206e6f7460408201526708185b1b1bddd95960c21b606082015260800190565b60008060408385031215612ca657600080fd5b8251915060208301516001600160401b03811115612cc357600080fd5b612ccf85828601612a83565b9150509250929050565b600060018201612ceb57612ceb612be9565b5060010190565b6001600160a01b03851681526001600160e01b031984166020820152606060408201819052600090612d279083018486612a09565b9695505050505050565b600080600060608486031215612d4657600080fd5b8351612d5181612763565b602085015160408601519194509250612d6981612763565b809150509250925092565b602080825260119082015270151bdad95b881b9bdd08185b1b1bddd959607a1b604082015260600190565b600080600060608486031215612db457600080fd5b835192506020840151915060408401516001600160401b03811115612dd857600080fd5b612de486828701612a83565b9150509250925092565b60008085851115612dfe57600080fd5b83861115612e0b57600080fd5b5050820193919092039150565b6001600160e01b03198135818116916004851015612e405780818660040360031b1b83161692505b505092915050565b600080600080600060a08688031215612e6057600080fd5b85519450602080870151945060408701516001600160401b03811115612e8557600080fd5b8701601f81018913612e9657600080fd5b8051612ea46128c882612a60565b81815260059190911b8201830190838101908b831115612ec357600080fd5b928401925b82841015612eea578351612edb81612763565b82529284019290840190612ec8565b8097505050505050612efe60608701612c12565b9150608086015190509295509295909350565b600060208284031215612f2357600080fd5b815161291d81612763565b6020808252602e908201527f76616c69646174655f7472616e736665724552433230416c6c496e3a20546f6b60408201526d195b881b9bdd08185b1b1bddd95960921b606082015260800190565b8082018082111561180057611800612be9565b60208082526025908201527f76616c69646174653164656c7461506174683a20546f6b656e206e6f7420616c6040820152641b1bddd95960da1b606082015260800190565b60008060408385031215612fe757600080fd5b8251612ff281612763565b602084015190925061300381612763565b809150509250929050565b6000806000806080858703121561302457600080fd5b845161302f81612763565b60208601516040870151919550935061304781612763565b6060959095015193969295505050565b600060a0828403121561306957600080fd5b60405160a081016001600160401b03828210818311171561308c5761308c612814565b8160405282935084519150808211156130a457600080fd5b506130b185828601612a83565b82525060208301516130c281612763565b806020830152506040830151604082015260608301516060820152608083015160808201525092915050565b60006020828403121561310057600080fd5b81516001600160401b0381111561311657600080fd5b61312284828501613057565b94935050505056fe737761704578616374546f6b656e73466f72546f6b656e732875696e743235362c75696e743235362c616464726573735b5d2c616464726573732c75696e7432353629737570706c7928616464726573732c75696e743235362c616464726573732c75696e74313629776974686472617728616464726573732c75696e743235362c6164647265737329617070726f766544656c65676174696f6e28616464726573732c75696e74323536296578616374496e707574282862797465732c616464726573732c75696e743235362c75696e743235362c75696e743235362929666c6173685377617045786163744f75742875696e743235362c75696e743235362c627974657329666c617368537761704578616374496e2875696e743235362c75696e743235362c62797465732965786163744f7574707574282862797465732c616464726573732c75696e743235362c75696e743235362c75696e743235362929a2646970667358221220b603d69f408106e492212ff58c93c034be3d82476c7f60a6952e62d679f8ab1e64736f6c63430008170033","sourceMap":"272:21473:3:-:0;;;3703:31;;;;;;;;;-1:-1:-1;936:32:0;734:10:2;936:18:0;:32::i;:::-;272:21473:3;;2426:187:0;2499:16;2518:6;;-1:-1:-1;;;;;2534:17:0;;;-1:-1:-1;;;;;;2534:17:0;;;;;;2566:40;;2518:6;;;;;;;2566:40;;2499:16;2566:40;2489:124;2426:187;:::o;272:21473:3:-;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405234801561001057600080fd5b50600436106103995760003560e01c80638c2fdf9e116101e9578063d7334c9d1161010f578063f259a073116100ad578063f901dc331161007c578063f901dc3314610890578063fa2c59c8146108a3578063fadbcf48146108b6578063fdedfa27146108d957600080fd5b8063f259a0731461039e578063f26749f314610857578063f2fde38b1461086a578063f76081e41461087d57600080fd5b8063ebe26816116100e9578063ebe26816146107ed578063ee5462cc14610800578063efb47bff14610813578063f20e85e01461084457600080fd5b8063d7334c9d146107a4578063e98539c5146107b7578063eb0de042146107ca57600080fd5b8063a847cf4d11610187578063c537bed011610156578063c537bed01461076b578063ca963c501461058a578063d075f9bb1461077e578063d4c0fe451461079157600080fd5b8063a847cf4d146106e2578063a9fc3d4f14610710578063be8c97b014610727578063c4cc9dba1461075857600080fd5b806398b3cc39116101c357806398b3cc3914610686578063a1b6b43014610699578063a4c1cccb146106ac578063a67e1f54146106cf57600080fd5b80638c2fdf9e1461064f5780638da5cb5b14610662578063957dc6c01461067357600080fd5b806359b92be9116102ce5780636d9a14231161026c578063732524941161023b57806373252494146105f1578063761bcd9c146106165780637ea446551461062957806386b6dbe51461063c57600080fd5b80636d9a1423146105b0578063713ebf3b146105c3578063715018a6146105d657806372e548a9146105de57600080fd5b806363cc17f2116102a857806363cc17f2146105645780636a6d5cc8146105775780636ad113531461058a5780636d5025f11461059d57600080fd5b806359b92be91461052b5780635ace1d921461053e5780635e4ccace1461055157600080fd5b80632dc32a611161033b5780633ea35551116103155780633ea35551146104cf578063425f49d0146104e25780634b941268146104f55780634b956bd81461051857600080fd5b80632dc32a611461046857806334ec8d7e146104995780633cf20025146104ac57600080fd5b80631710a4f2116103775780631710a4f2146103fe5780631c123e77146104115780631d49039c146104245780632d12d7881461045557600080fd5b806304a3ba251461039e57806307ac3562146103b357806307ef00cf146103c6575b600080fd5b6103b16103ac3660046127c0565b6108e8565b005b6103b16103c1366004612881565b610951565b6103e96103d4366004612900565b60066020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6103b161040c366004612881565b610c92565b6103b161041f366004612881565b610d48565b6103e9610432366004612900565b6001600160a01b031660009081526007602052604090205460ff16151560011490565b6103b16104633660046127c0565b610dc2565b6103e9610476366004612900565b6001600160a01b031660009081526008602052604090205460ff16151560011490565b6103b16104a73660046127c0565b610e1e565b6103e96104ba366004612900565b60056020526000908152604090205460ff1681565b6103b16104dd3660046127c0565b610e86565b6103b16104f0366004612881565b610eb1565b6103e9610503366004612900565b60086020526000908152604090205460ff1681565b6103b1610526366004612881565b610ed3565b6103b1610539366004612881565b610f78565b6103b161054c3660046127c0565b610ffa565b6103b161055f366004612941565b611059565b6103b16105723660046127c0565b6110ef565b6103b1610585366004612881565b61114e565b6103b1610598366004612881565b6111f6565b6103b16105ab3660046129a3565b611219565b6103b16105be3660046127c0565b611798565b6103e96105d13660046129d4565b6117ce565b6103b1611806565b6103b16105ec3660046127c0565b61181a565b6000546001600160a01b03165b6040516001600160a01b0390911681526020016103f5565b6103b1610624366004612881565b611879565b6103b1610637366004612881565b611984565b6103b161064a3660046127c0565b6119c1565b6103b161065d3660046127c0565b611a20565b6000546001600160a01b03166105fe565b6103b1610681366004612881565b611a7c565b6103b16106943660046127c0565b611b3c565b6103b16106a7366004612881565b611b9b565b6103e96106ba366004612900565b60036020526000908152604090205460ff1681565b6103b16106dd3660046127c0565b611ce3565b6103e96106f03660046129d4565b600160209081526000928352604080842090915290825290205460ff1681565b61071960025481565b6040519081526020016103f5565b6103e9610735366004612900565b6001600160a01b031660009081526004602052604090205460ff16151560011490565b6103b1610766366004612881565b611d3f565b6103e9610779366004612900565b611dfa565b6103e961078c366004612900565b611e1d565b6103b161079f366004612881565b611e40565b6103b16107b2366004612941565b611e80565b6103b16107c5366004612881565b611ef3565b6103e96107d8366004612900565b60076020526000908152604090205460ff1681565b6103b16107fb366004612881565b611f95565b6103b161080e3660046127c0565b61202c565b6103e9610821366004612900565b6001600160a01b031660009081526006602052604090205460ff16151560011490565b6103b16108523660046127c0565b6120e1565b6103b16108653660046129a3565b612137565b6103b1610878366004612900565b6121ac565b6103b161088b366004612881565b612225565b6103b161089e3660046127c0565b6122a1565b6103b16108b13660046127c0565b6122fd565b6103e96108c4366004612900565b60046020526000908152604090205460ff1681565b604051600181526020016103f5565b6108f061235c565b6001600160a01b03831660009081526007602052604090819020805460ff19169055517fb71be9befd3ac90c1c9981d3b1161b3c2c6dcd741f13b34061aa251226a802df9061094490859085908590612a32565b60405180910390a1505050565b6000818060200190518101906109679190612aec565b905060005b8151811015610c8d57600082828151811061098957610989612b9c565b6020026020010151905060006109ac60006004846123b69092919063ffffffff16565b6109b590612bb2565b905060006109d360048085516109cb9190612bff565b8591906123b6565b6040805180820190915260208082527f7472616e736665724552433230496e28616464726573732c75696e74323536299101529050631dac092b60e11b6001600160e01b0319831601610a2e57610a2981610f78565b610c82565b60408051808201909152601b81527f7472616e736665724552433230416c6c496e2861646472657373290000000000602090910152635cf59cb760e11b6001600160e01b0319831601610a8457610a2981611984565b60408051808201909152601881527f6465706f73697428616464726573732c6164647265737329000000000000000060209091015262d3ec1f60e31b6001600160e01b0319831601610ad957610a2981611d3f565b60408051808201909152601981527f776974686472617728616464726573732c6164647265737329000000000000006020909101526306bf1c7b60e01b6001600160e01b0319831601610b2f57610a2981612225565b610b5660405180606001604052806027815260200161323260279139805160209091012090565b6001600160e01b031916826001600160e01b03191603610b7957610a29816111f6565b610ba060405180606001604052806028815260200161320a60289139805160209091012090565b6001600160e01b031916826001600160e01b03191603610bc357610a29816111f6565b60408051808201909152601e81527f666c61736853776170416c6c4f75742875696e743235362c627974657329000060209091015263d2b3d16560e01b6001600160e01b0319831601610c1957610a2981610eb1565b60405162461bcd60e51b815260206004820152603360248201527f76616c69646174655f3164656c74614d756c746963616c6c3a20556e6b6e6f776044820152723710333ab731ba34b7b71039b2b632b1ba37b960691b60648201526084015b60405180910390fd5b50505060010161096c565b505050565b600081806020019051810190610ca89190612c1d565b509050610cd2816001600160a01b031660009081526006602052604090205460ff16151560011490565b610d445760405162461bcd60e51b815260206004820152603c60248201527f76616c69646174655f7472616e736665723a205265636569766572206164647260448201527f657373206e6f742077686974656c6973746564206279204775617264000000006064820152608401610c79565b5050565b6000805b610d558361250d565b5092509050610d6382611dfa565b610d7f5760405162461bcd60e51b8152600401610c7990612c4b565b610d8881611dfa565b610da45760405162461bcd60e51b8152600401610c7990612c4b565b610dad83612549565b15610c8d57610dbb83612583565b9250610d4c565b610dca61235c565b6001600160a01b03831660009081526005602052604090819020805460ff19169055517f4e13b11ab98e672bd78295ef9cebe764dc617f95decf47d842c25b83abc0c7249061094490859085908590612a32565b610e5083610e496040518060600160405280603381526020016131d760339139805160209091012090565b8484611059565b610e7b83610e4960405180606001604052806034815260200161325960349139805160209091012090565b610c8d838383611b3c565b610e7b83610e4960405180608001604052806043815260200161312b60439139805160209091012090565b600081806020019051810190610ec79190612c93565b915050610d4481611b9b565b600081806020019051810190610ee99190612c1d565b509050610f13816001600160a01b031660009081526007602052604090205460ff16151560011490565b610d445760405162461bcd60e51b815260206004820152603060248201527f76616c69646174655f617070726f76653a20417070726f76652061646472657360448201526f0e640c8decae640dcdee840dac2e8c6d60831b6064820152608401610c79565b600081806020019051810190610f8e9190612c1d565b509050610f9a81611dfa565b610d445760405162461bcd60e51b815260206004820152602b60248201527f76616c69646174655f7472616e736665724552433230496e3a20546f6b656e2060448201526a1b9bdd08185b1b1bddd95960aa1b6064820152608401610c79565b61100261235c565b6001600160a01b03831660009081526006602052604090819020805460ff19166001179055517f3562181221a42a19ddd03a82dfe06acab1905ceb65cdaf7d86a1d9fec66435529061094490859085908590612a32565b61106161235c565b6001600160a01b03841660009081526001602081815260408084206001600160e01b0319881685529091528220805460ff1916909117905560028054916110a783612cd9565b91905055507fef729aaa41b9fd994f9ff7c1960df214a84f722002e6cfbea31799cd0873a3ef848484846040516110e19493929190612cf2565b60405180910390a150505050565b6110f761235c565b6001600160a01b03831660009081526008602052604090819020805460ff19166001179055517f628a44970c0e450415e3ae74334ea44f3307b74dbf677a1371190242bf2f35899061094490859085908590612a32565b600080828060200190518101906111659190612d31565b925050915061117382611dfa565b61118f5760405162461bcd60e51b8152600401610c7990612d74565b61119881611e1d565b610c8d5760405162461bcd60e51b815260206004820152602960248201527f52656365697665722061646472657373206e6f742077686974656c697374656460448201526808189e4811dd585c9960ba1b6064820152608401610c79565b60008180602001905181019061120c9190612d9f565b92505050610d4481611b9b565b6000546001600160a01b0385811691161461179257611255846001600160a01b031660009081526004602052604090205460ff16151560011490565b6112a15760405162461bcd60e51b815260206004820181905260248201527f76616c696461746543616c6c3a2053656e646572206e6f7420616c6c6f7765646044820152606401610c79565b60006112b06004828486612dee565b6112b991612e18565b90503660006112cb8460048188612dee565b915091506112d986846117ce565b6113315760405162461bcd60e51b815260206004820152602360248201527f76616c696461746543616c6c3a2043616c6c2073697465206e6f7420616c6c6f6044820152621dd95960ea1b6064820152608401610c79565b61135860405180608001604052806043815260200161312b60439139805160209091012090565b6001600160e01b031916836001600160e01b031916036113b6576113b182828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061187992505050565b61178e565b6113dd6040518060600160405280603381526020016131d760339139805160209091012090565b6001600160e01b031916836001600160e01b03191603611436576113b182828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f9592505050565b6040805180820190915260128152716d756c746963616c6c2862797465735b5d2960701b602090910152630a6d35e560e31b6001600160e01b03198416016114b7576113b182828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061095192505050565b6040805180820190915260198152787472616e7366657228616464726573732c75696e743235362960381b6020909101526356fa634560e01b6001600160e01b031984160161153f576113b182828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610c9292505050565b604080518082019091526018815277617070726f766528616464726573732c75696e743235362960401b60209091015263f6a1584d60e01b6001600160e01b03198416016115c6576113b182828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610ed392505050565b6115ed6040518060600160405280602281526020016131b560229139805160209091012090565b6001600160e01b031916836001600160e01b03191603611646576113b182828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a7c92505050565b61166d60405180606001604052806026815260200161316e60269139805160209091012090565b6001600160e01b031916836001600160e01b031916036116c6576113b182828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611e4092505050565b6116ed60405180606001604052806021815260200161319460219139805160209091012090565b6001600160e01b031916836001600160e01b03191603611746576113b182828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061114e92505050565b60405162461bcd60e51b815260206004820152601960248201527f556e6b6e6f776e2066756e6374696f6e2073656c6563746f72000000000000006044820152606401610c79565b5050505b50505050565b6117c383610e496040518060600160405280602281526020016131b560229139805160209091012090565b610c8d8383836119c1565b6001600160a01b03821660009081526001602090815260408083206001600160e01b03198516845290915290205460ff165b92915050565b61180e61235c565b61181860006125b4565b565b61182261235c565b6001600160a01b03831660009081526005602052604090819020805460ff19166001179055517f62dd88c5ecfa60713a657640ebec4de26fc1aefa4afdb24e6d15a124fce727799061094490859085908590612a32565b600080828060200190518101906118909190612e48565b509350935050506118a081611e1d565b6119275760405162461bcd60e51b815260206004820152604c60248201527f76616c69646174655f737761704578616374546f6b656e73466f72546f6b656e60448201527f733a2052656365697665722061646472657373206e6f742077686974656c697360648201526b1d195908189e4811dd585c9960a21b608482015260a401610c79565b6000805b835181101561197d5783818151811061194657611946612b9c565b6020026020010151915061195982611dfa565b6119755760405162461bcd60e51b8152600401610c7990612d74565b60010161192b565b5050505050565b60008180602001905181019061199a9190612f11565b90506119a581611dfa565b610d445760405162461bcd60e51b8152600401610c7990612f2e565b6119c961235c565b6001600160a01b03831660009081526003602052604090819020805460ff19166001179055517fad90e2570fc4fe9f7437be3188d5c791c6662892d31731992aa88f5c876219839061094490859085908590612a32565b611a2861235c565b6001600160a01b03831660009081526006602052604090819020805460ff19169055517f1212f8ddb39de8e1a339460c95752d61100723efeaa34ccd94bca94393f409389061094490859085908590612a32565b600081806020019051810190611a929190612c1d565b509050611abc816001600160a01b031660009081526008602052604090205460ff16151560011490565b610d445760405162461bcd60e51b815260206004820152604560248201527f76616c69646174655f617070726f766544656c65676174696f6e3a204170707260448201527f6f76652064656c65676174696f6e206164647265737320646f6573206e6f74206064820152640dac2e8c6d60db1b608482015260a401610c79565b611b4461235c565b6001600160a01b03831660009081526007602052604090819020805460ff19166001179055517f628a44970c0e450415e3ae74334ea44f3307b74dbf677a1371190242bf2f35899061094490859085908590612a32565b6000805b611baa836000612604565b9150611bd9600180611bbe60036014612f7c565b611bc89190612f7c565b611bd29190612f7c565b8490612604565b9050611be482611dfa565b611c005760405162461bcd60e51b8152600401610c7990612f8f565b611c0981611dfa565b611c255760405162461bcd60e51b8152600401610c7990612f8f565b600180611c3460036014612f7c565b611c3e9190612f7c565b611c489190612f7c565b6014600180611c58600384612f7c565b611c629190612f7c565b611c6c9190612f7c565b611c769190612f7c565b611c809190612f7c565b835110610c8d57611cdc600180611c9960036014612f7c565b611ca39190612f7c565b611cad9190612f7c565b600180611cbc60036014612f7c565b611cc69190612f7c565b611cd09190612f7c565b85516109cb9190612bff565b9250611b9f565b611ceb61235c565b6001600160a01b03831660009081526004602052604090819020805460ff19169055517f3097928509c53a2dab9500431201d82b0d756e8f890fd01f4ae6b33b45687ea49061094490859085908590612a32565b60008082806020019051810190611d569190612fd4565b91509150611d6382611dfa565b611d7f5760405162461bcd60e51b8152600401610c7990612f2e565b611d8881611e1d565b610c8d5760405162461bcd60e51b815260206004820152603b60248201527f76616c69646174655f6465706f7369743a20526563656976657220616464726560448201527f7373206e6f742077686974656c697374656420627920477561726400000000006064820152608401610c79565b6001600160a01b031660009081526003602052604090205460ff16151560011490565b6001600160a01b031660009081526005602052604090205460ff16151560011490565b600081806020019051810190611e56919061300e565b5050509050611e6481611dfa565b610d445760405162461bcd60e51b8152600401610c7990612d74565b611e8861235c565b6001600160a01b03841660009081526001602090815260408083206001600160e01b03198716845290915290819020805460ff19169055517f37ea10f2d08f5a9803dfcd5abf3cfc7b0d6fcdf5fcbc36be9ea5a0b53d9a4d9b906110e1908690869086908690612cf2565b600081806020019051810190611f0991906130ee565b9050611f188160200151611e1d565b611f8a5760405162461bcd60e51b815260206004820152603f60248201527f76616c69646174655f65786163744f75747075743a205265636569766572206160448201527f646472657373206e6f742077686974656c6973746564206279204775617264006064820152608401610c79565b8051610d4490610d48565b600081806020019051810190611fab91906130ee565b9050611fba8160200151611e1d565b611f8a5760405162461bcd60e51b815260206004820152603e60248201527f76616c69646174655f6578616374496e7075743a20526563656976657220616460448201527f6472657373206e6f742077686974656c697374656420627920477561726400006064820152608401610c79565b6040805180820190915260198152787472616e7366657228616464726573732c75696e743235362960381b602090910152612087837fa9059cbb2ab09eb219583f4a59a5d0623ade346d962bcd4e46b11da047c9049b610e49565b604080518082019091526018815277617070726f766528616464726573732c75696e743235362960401b6020909101526117c3837f095ea7b334ae44009aa867bfb386f5c3b4b443ac6f0ee573fa91c4608fbadfba610e49565b61210c83610e4960405180606001604052806026815260200161316e60269139805160209091012090565b610e7b83610e4960405180606001604052806021815260200161319460219139805160209091012090565b6040805180820190915260128152716d756c746963616c6c2862797465735b5d2960701b60209091015261218b847fac9650d882acfa253cba1ed543b9ff47351da99c3bd00a89625e5cdb2099009c610e49565b612196848383611b3c565b6121a1838383611b3c565b6117928483836110ef565b6121b461235c565b6001600160a01b0381166122195760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c79565b612222816125b4565b50565b6000808280602001905181019061223c9190612fd4565b9150915061224982611dfa565b611d7f5760405162461bcd60e51b8152602060048201526024808201527f76616c69646174655f77697468647261773a20546f6b656e206e6f7420616c6c6044820152631bddd95960e21b6064820152608401610c79565b6122a961235c565b6001600160a01b03831660009081526003602052604090819020805460ff19169055517f9ca3f065622f5f03f32b7157677a0e420c3a36ab45fd49f256ffebce3e3105879061094490859085908590612a32565b61230561235c565b6001600160a01b03831660009081526004602052604090819020805460ff19166001179055517fa8f9caaf4861720900294428e4ff34d37070c37afd26d96e6e4da75326d2c3ad9061094490859085908590612a32565b6000546001600160a01b031633146118185760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c79565b6060816123c481601f612f7c565b10156124035760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b6044820152606401610c79565b8261240e8382612f7c565b101561244d5760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b6044820152606401610c79565b6124578284612f7c565b8451101561249b5760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b6044820152606401610c79565b6060821580156124ba5760405191506000825260208201604052612504565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156124f35780518352602092830192016124db565b5050858452601f01601f1916604052505b50949350505050565b6000808061251b8482612604565b92506125288460146126b8565b905061254061253960036014612f7c565b8590612604565b91509193909250565b600061255760036014612f7c565b6014612564600382612f7c565b61256e9190612f7c565b6125789190612f7c565b825110159050919050565b606061180061259460036014612f7c565b6125a060036014612f7c565b84516125ac9190612bff565b8491906123b6565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600081612612816014612f7c565b10156126555760405162461bcd60e51b8152602060048201526012602482015271746f416464726573735f6f766572666c6f7760701b6044820152606401610c79565b612660826014612f7c565b835110156126a85760405162461bcd60e51b8152602060048201526015602482015274746f416464726573735f6f75744f66426f756e647360581b6044820152606401610c79565b500160200151600160601b900490565b6000816126c6816003612f7c565b10156127085760405162461bcd60e51b8152602060048201526011602482015270746f55696e7432345f6f766572666c6f7760781b6044820152606401610c79565b612713826003612f7c565b8351101561275a5760405162461bcd60e51b8152602060048201526014602482015273746f55696e7432345f6f75744f66426f756e647360601b6044820152606401610c79565b50016003015190565b6001600160a01b038116811461222257600080fd5b60008083601f84011261278a57600080fd5b5081356001600160401b038111156127a157600080fd5b6020830191508360208285010111156127b957600080fd5b9250929050565b6000806000604084860312156127d557600080fd5b83356127e081612763565b925060208401356001600160401b038111156127fb57600080fd5b61280786828701612778565b9497909650939450505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561285257612852612814565b604052919050565b60006001600160401b0382111561287357612873612814565b50601f01601f191660200190565b60006020828403121561289357600080fd5b81356001600160401b038111156128a957600080fd5b8201601f810184136128ba57600080fd5b80356128cd6128c88261285a565b61282a565b8181528560208385010111156128e257600080fd5b81602084016020830137600091810160200191909152949350505050565b60006020828403121561291257600080fd5b813561291d81612763565b9392505050565b80356001600160e01b03198116811461293c57600080fd5b919050565b6000806000806060858703121561295757600080fd5b843561296281612763565b935061297060208601612924565b925060408501356001600160401b0381111561298b57600080fd5b61299787828801612778565b95989497509550505050565b600080600080606085870312156129b957600080fd5b84356129c481612763565b9350602085013561297081612763565b600080604083850312156129e757600080fd5b82356129f281612763565b9150612a0060208401612924565b90509250929050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b0384168152604060208201819052600090612a579083018486612a09565b95945050505050565b60006001600160401b03821115612a7957612a79612814565b5060051b60200190565b600082601f830112612a9457600080fd5b8151612aa26128c88261285a565b8181526020856020848701011115612ab957600080fd5b60005b83811015612ad7578581018201518382018301528101612abc565b50506000918101602001919091529392505050565b60006020808385031215612aff57600080fd5b82516001600160401b0380821115612b1657600080fd5b818501915085601f830112612b2a57600080fd5b8151612b386128c882612a60565b81815260059190911b83018401908481019088831115612b5757600080fd5b8585015b83811015612b8f57805185811115612b735760008081fd5b612b818b89838a0101612a83565b845250918601918601612b5b565b5098975050505050505050565b634e487b7160e01b600052603260045260246000fd5b805160208201516001600160e01b03198082169291906004831015612be15780818460040360031b1b83161693505b505050919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561180057611800612be9565b805161293c81612763565b60008060408385031215612c3057600080fd5b8251612c3b81612763565b6020939093015192949293505050565b60208082526028908201527f76616c6964617465556e69737761705633506174683a20546f6b656e206e6f7460408201526708185b1b1bddd95960c21b606082015260800190565b60008060408385031215612ca657600080fd5b8251915060208301516001600160401b03811115612cc357600080fd5b612ccf85828601612a83565b9150509250929050565b600060018201612ceb57612ceb612be9565b5060010190565b6001600160a01b03851681526001600160e01b031984166020820152606060408201819052600090612d279083018486612a09565b9695505050505050565b600080600060608486031215612d4657600080fd5b8351612d5181612763565b602085015160408601519194509250612d6981612763565b809150509250925092565b602080825260119082015270151bdad95b881b9bdd08185b1b1bddd959607a1b604082015260600190565b600080600060608486031215612db457600080fd5b835192506020840151915060408401516001600160401b03811115612dd857600080fd5b612de486828701612a83565b9150509250925092565b60008085851115612dfe57600080fd5b83861115612e0b57600080fd5b5050820193919092039150565b6001600160e01b03198135818116916004851015612e405780818660040360031b1b83161692505b505092915050565b600080600080600060a08688031215612e6057600080fd5b85519450602080870151945060408701516001600160401b03811115612e8557600080fd5b8701601f81018913612e9657600080fd5b8051612ea46128c882612a60565b81815260059190911b8201830190838101908b831115612ec357600080fd5b928401925b82841015612eea578351612edb81612763565b82529284019290840190612ec8565b8097505050505050612efe60608701612c12565b9150608086015190509295509295909350565b600060208284031215612f2357600080fd5b815161291d81612763565b6020808252602e908201527f76616c69646174655f7472616e736665724552433230416c6c496e3a20546f6b60408201526d195b881b9bdd08185b1b1bddd95960921b606082015260800190565b8082018082111561180057611800612be9565b60208082526025908201527f76616c69646174653164656c7461506174683a20546f6b656e206e6f7420616c6040820152641b1bddd95960da1b606082015260800190565b60008060408385031215612fe757600080fd5b8251612ff281612763565b602084015190925061300381612763565b809150509250929050565b6000806000806080858703121561302457600080fd5b845161302f81612763565b60208601516040870151919550935061304781612763565b6060959095015193969295505050565b600060a0828403121561306957600080fd5b60405160a081016001600160401b03828210818311171561308c5761308c612814565b8160405282935084519150808211156130a457600080fd5b506130b185828601612a83565b82525060208301516130c281612763565b806020830152506040830151604082015260608301516060820152608083015160808201525092915050565b60006020828403121561310057600080fd5b81516001600160401b0381111561311657600080fd5b61312284828501613057565b94935050505056fe737761704578616374546f6b656e73466f72546f6b656e732875696e743235362c75696e743235362c616464726573735b5d2c616464726573732c75696e7432353629737570706c7928616464726573732c75696e743235362c616464726573732c75696e74313629776974686472617728616464726573732c75696e743235362c6164647265737329617070726f766544656c65676174696f6e28616464726573732c75696e74323536296578616374496e707574282862797465732c616464726573732c75696e743235362c75696e743235362c75696e743235362929666c6173685377617045786163744f75742875696e743235362c75696e743235362c627974657329666c617368537761704578616374496e2875696e743235362c75696e743235362c62797465732965786163744f7574707574282862797465732c616464726573732c75696e743235362c75696e743235362c75696e743235362929a2646970667358221220b603d69f408106e492212ff58c93c034be3d82476c7f60a6952e62d679f8ab1e64736f6c63430008170033","sourceMap":"272:21473:3:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6155:221;;;;;;:::i;:::-;;:::i;:::-;;13814:1680;;;;;;:::i;:::-;;:::i;2467:79::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2750:14:8;;2743:22;2725:41;;2713:2;2698:18;2467:79:3;;;;;;;;8342:248;;;;;;:::i;:::-;;:::i;12883:539::-;;;;;;:::i;:::-;;:::i;7882:152::-;;;;;;:::i;:::-;-1:-1:-1;;;;;7982:37:3;7959:4;7982:37;;;:27;:37;;;;;;;;:45;;:37;:45;;7882:152;5289:179;;;;;;:::i;:::-;;:::i;8040:172::-;;;;;;:::i;:::-;-1:-1:-1;;;;;8150:47:3;8127:4;8150:47;;;:37;:47;;;;;;;;:55;;:47;:55;;8040:172;13428:351;;;;;;:::i;:::-;;:::i;2373:65::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;11910:260;;;;;;:::i;:::-;;:::i;18401:183::-;;;;;;:::i;:::-;;:::i;2685:89::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;8596:235;;;;;;:::i;:::-;;:::i;15685:234::-;;;;;;:::i;:::-;;:::i;5474:221::-;;;;;;:::i;:::-;;:::i;4301:235::-;;;;;;:::i;:::-;;:::i;6382:241::-;;;;;;:::i;:::-;;:::i;21090:308::-;;;;;;:::i;:::-;;:::i;18014:196::-;;;;;;:::i;:::-;;:::i;9613:1744::-;;;;;;:::i;:::-;;:::i;9394:213::-;;;;;;:::i;:::-;;:::i;7257:145::-;;;;;;:::i;:::-;;:::i;1824:101:0:-;;;:::i;5104:179:3:-;;;;;;:::i;:::-;;:::i;3992:93::-;4045:7;1273:6:0;-1:-1:-1;;;;;1273:6:0;3992:93:3;;;-1:-1:-1;;;;;4757:32:8;;;4739:51;;4727:2;4712:18;3992:93:3;4593:203:8;11396:508:3;;;;;;:::i;:::-;;:::i;16110:229::-;;;;;;:::i;:::-;;:::i;6866:161::-;;;;;;:::i;:::-;;:::i;5701:221::-;;;;;;:::i;:::-;;:::i;1201:85:0:-;1247:7;1273:6;-1:-1:-1;;;;;1273:6:0;1201:85;;8837:276:3;;;;;;:::i;:::-;;:::i;5928:221::-;;;;;;:::i;:::-;;:::i;19125:729::-;;;;;;:::i;:::-;;:::i;2155:59::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;4931:167;;;;;;:::i;:::-;;:::i;1848:91::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;2060:25;;;;;;;;;4947::8;;;4935:2;4920:18;2060:25:3;4801:177:8;7408:122:3;;;;;;:::i;:::-;-1:-1:-1;;;;;7493:22:3;7470:4;7493:22;;;:14;:22;;;;;;;;:30;;:22;:30;;7408:122;16534:368;;;;;;:::i;:::-;;:::i;8218:118::-;;;;;;:::i;:::-;;:::i;7588:130::-;;;;;;:::i;:::-;;:::i;20621:311::-;;;;;;:::i;:::-;;:::i;4542:210::-;;;;;;:::i;:::-;;:::i;12544:333::-;;;;;;:::i;:::-;;:::i;2576:79::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;12209:329;;;;;;:::i;:::-;;:::i;9119:269::-;;;;;;:::i;:::-;;:::i;7724:152::-;;;;;;:::i;:::-;-1:-1:-1;;;;;7824:37:3;7801:4;7824:37;;;:27;:37;;;;;;;;:45;;:37;:45;;7724:152;21404:339;;;;;;:::i;:::-;;:::i;19860:603::-;;;;;;:::i;:::-;;:::i;2074:198:0:-;;;;;;:::i;:::-;;:::i;17078:359:3:-;;;;;;:::i;:::-;;:::i;7033:161::-;;;;;;:::i;:::-;;:::i;4758:167::-;;;;;;:::i;:::-;;:::i;2263:61::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;4212:83;;;4287:1;5817:36:8;;5805:2;5790:18;4212:83:3;5675:184:8;6155:221:3;1094:13:0;:11;:13::i;:::-;-1:-1:-1;;;;;6268:40:3;::::1;;::::0;;;:27:::1;:40;::::0;;;;;;6261:47;;-1:-1:-1;;6261:47:3::1;::::0;;6323:46;::::1;::::0;::::1;::::0;6296:11;;6363:5;;;;6323:46:::1;:::i;:::-;;;;;;;;6155:221:::0;;;:::o;13814:1680::-;13894:22;13931:8;13920:31;;;;;;;;;;;;:::i;:::-;13893:58;;14018:6;14013:1475;14030:7;:14;14026:1;:18;14013:1475;;;14065:33;14101:7;14109:1;14101:10;;;;;;;;:::i;:::-;;;;;;;14065:46;;14186:15;14211:32;14238:1;14241;14211:20;:26;;:32;;;;;:::i;:::-;14204:40;;;:::i;:::-;14186:58;;14258:24;14285:62;14312:1;14345;14315:20;:27;:31;;;;:::i;:::-;14285:20;;:62;:26;:62::i;:::-;14416:47;;;;;;;;;;;;;;;;;14258:89;-1:-1:-1;;;;;;;;;;14404:59:3;;;14400:1078;;14483:37;14508:11;14483:24;:37::i;:::-;14400:1078;;;14557:42;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;14545:54:3;;;14541:937;;14619:40;14647:11;14619:27;:40::i;14541:937::-;14696:39;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;14684:51:3;;;14680:798;;14755:35;14778:11;14755:22;:35::i;14680:798::-;14827:40;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;14815:52:3;;;14811:667;;14887:36;14911:11;14887:23;:36::i;14811:667::-;14960:54;;;;;;;;;;;;;;;;;;3899:23;;;;;;;;3740:190;14960:54;-1:-1:-1;;;;;14948:66:3;;:8;-1:-1:-1;;;;;14948:66:3;;;14944:534;;15034:39;15061:11;15034:26;:39::i;14944:534::-;15110:55;;;;;;;;;;;;;;;;;;3899:23;;;;;;;;3740:190;15110:55;-1:-1:-1;;;;;15098:67:3;;:8;-1:-1:-1;;;;;15098:67:3;;;15094:384;;15185:39;15212:11;15185:26;:39::i;15094:384::-;15261:45;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;15249:57:3;;;15245:233;;15326:37;15351:11;15326:24;:37::i;15245:233::-;15402:61;;-1:-1:-1;;;15402:61:3;;9363:2:8;15402:61:3;;;9345:21:8;9402:2;9382:18;;;9375:30;9441:34;9421:18;;;9414:62;-1:-1:-1;;;9492:18:8;;;9485:49;9551:19;;15402:61:3;;;;;;;;15245:233;-1:-1:-1;;;14046:3:3;;14013:1475;;;;13883:1611;13814:1680;:::o;8342:248::-;8415:10;8442:8;8431:37;;;;;;;;;;;;:::i;:::-;8414:54;;;8486:32;8515:2;-1:-1:-1;;;;;7824:37:3;7801:4;7824:37;;;:27;:37;;;;;;;;:45;;:37;:45;;7724:152;8486:32;8478:105;;;;-1:-1:-1;;;8478:105:3;;10259:2:8;8478:105:3;;;10241:21:8;10298:2;10278:18;;;10271:30;10337:34;10317:18;;;10310:62;10408:30;10388:18;;;10381:58;10456:19;;8478:105:3;10057:424:8;8478:105:3;8404:186;8342:248;:::o;12883:539::-;12955:15;12980:16;13007:409;13058:22;:4;:20;:22::i;:::-;-1:-1:-1;13034:46:3;-1:-1:-1;13034:46:3;-1:-1:-1;13103:23:3;13034:46;13103:14;:23::i;:::-;13095:76;;;;-1:-1:-1;;;13095:76:3;;;;;;;:::i;:::-;13193:24;13208:8;13193:14;:24::i;:::-;13185:77;;;;-1:-1:-1;;;13185:77:3;;;;;;;:::i;:::-;13281:23;:4;:21;:23::i;:::-;13277:129;;;13331:16;:4;:14;:16::i;:::-;13324:23;;13007:409;;5289:179;1094:13:0;:11;:13::i;:::-;-1:-1:-1;;;;;5388:26:3;::::1;;::::0;;;:16:::1;:26;::::0;;;;;;5381:33;;-1:-1:-1;;5381:33:3::1;::::0;;5429:32;::::1;::::0;::::1;::::0;5405:8;;5455:5;;;;5429:32:::1;:::i;13428:351::-:0;13520:96;13534:6;13542:66;;;;;;;;;;;;;;;;;;3899:23;;;;;;;;3740:190;13542:66;13610:5;;13520:13;:96::i;:::-;13626:97;13640:6;13648:67;;;;;;;;;;;;;;;;;;3899:23;;;;;;;;3740:190;13626:97;13733:39;13758:6;13766:5;;13733:24;:39::i;11910:260::-;12002:112;12016:6;12024:82;;;;;;;;;;;;;;;;;;3899:23;;;;;;;;3740:190;18401:183;18483:17;18515:8;18504:38;;;;;;;;;;;;:::i;:::-;18480:62;;;18553:24;18572:4;18553:18;:24::i;8596:235::-;8668:10;8695:8;8684:37;;;;;;;;;;;;:::i;:::-;8667:54;;;8739:32;8768:2;-1:-1:-1;;;;;7982:37:3;7959:4;7982:37;;;:27;:37;;;;;;;;:45;;:37;:45;;7882:152;8739:32;8731:93;;;;-1:-1:-1;;;8731:93:3;;11498:2:8;8731:93:3;;;11480:21:8;11537:2;11517:18;;;11510:30;11576:34;11556:18;;;11549:62;-1:-1:-1;;;11627:18:8;;;11620:46;11683:19;;8731:93:3;11296:412:8;15685:234:3;15765:13;15795:8;15784:40;;;;;;;;;;;;:::i;:::-;15764:60;;;15843:21;15858:5;15843:14;:21::i;:::-;15835:77;;;;-1:-1:-1;;;15835:77:3;;11915:2:8;15835:77:3;;;11897:21:8;11954:2;11934:18;;;11927:30;11993:34;11973:18;;;11966:62;-1:-1:-1;;;12044:18:8;;;12037:41;12095:19;;15835:77:3;11713:407:8;5474:221:3;1094:13:0;:11;:13::i;:::-;-1:-1:-1;;;;;5579:40:3;::::1;;::::0;;;:27:::1;:40;::::0;;;;;;:47;;-1:-1:-1;;5579:47:3::1;5622:4;5579:47;::::0;;5641;::::1;::::0;::::1;::::0;5607:11;;5682:5;;;;5641:47:::1;:::i;4301:235::-:0;1094:13:0;:11;:13::i;:::-;-1:-1:-1;;;;;4407:24:3;::::1;;::::0;;;4444:4:::1;4407:24;::::0;;;;;;;-1:-1:-1;;;;;;4407:34:3;::::1;::::0;;;;;;;:41;;-1:-1:-1;;4407:41:3::1;::::0;;::::1;::::0;;4458:13:::1;:15:::0;;;::::1;::::0;::::1;:::i;:::-;;;;;;4488:41;4505:6;4513:8;4523:5;;4488:41;;;;;;;;;:::i;:::-;;;;;;;;4301:235:::0;;;;:::o;6382:241::-;1094:13:0;:11;:13::i;:::-;-1:-1:-1;;;;;6497:50:3;::::1;;::::0;;;:37:::1;:50;::::0;;;;;;:57;;-1:-1:-1;;6497:57:3::1;6550:4;6497:57;::::0;;6569:47;::::1;::::0;::::1;::::0;6535:11;;6610:5;;;;6569:47:::1;:::i;21090:308::-:0;21167:13;21184:10;21209:8;21198:46;;;;;;;;;;;;:::i;:::-;21166:78;;;;;21263:21;21278:5;21263:14;:21::i;:::-;21255:51;;;;-1:-1:-1;;;21255:51:3;;;;;;;:::i;:::-;21324:21;21342:2;21324:17;:21::i;:::-;21316:75;;;;-1:-1:-1;;;21316:75:3;;13725:2:8;21316:75:3;;;13707:21:8;13764:2;13744:18;;;13737:30;13803:34;13783:18;;;13776:62;-1:-1:-1;;;13854:18:8;;;13847:39;13903:19;;21316:75:3;13523:405:8;18014:196:3;18100:17;18132:8;18121:47;;;;;;;;;;;;:::i;:::-;18095:73;;;;18179:24;18198:4;18179:18;:24::i;9613:1744::-;4045:7;1273:6:0;-1:-1:-1;;;;;9762:32:3;;;1273:6:0;;9759:125:3;9867:7;9759:125;9902:23;9918:6;-1:-1:-1;;;;;7493:22:3;7470:4;7493:22;;;:14;:22;;;;;;;;:30;;:22;:30;;7408:122;9902:23;9894:68;;;;-1:-1:-1;;;9894:68:3;;14597:2:8;9894:68:3;;;14579:21:8;;;14616:18;;;14609:30;14675:34;14655:18;;;14648:62;14727:18;;9894:68:3;14395:356:8;9894:68:3;10028:15;10053:24;10075:1;10028:15;10053:20;;:24;:::i;:::-;10046:32;;;:::i;:::-;10028:50;-1:-1:-1;10088:23:3;;10114:24;:20;10135:1;10114:20;;:24;:::i;:::-;10088:50;;;;10156:35;10174:6;10182:8;10156:17;:35::i;:::-;10148:83;;;;-1:-1:-1;;;10148:83:3;;15622:2:8;10148:83:3;;;15604:21:8;15661:2;15641:18;;;15634:30;15700:34;15680:18;;;15673:62;-1:-1:-1;;;15751:18:8;;;15744:33;15794:19;;10148:83:3;15420:399:8;10148:83:3;10257:82;;;;;;;;;;;;;;;;;;3899:23;;;;;;;;3740:190;10257:82;-1:-1:-1;;;;;10245:94:3;;:8;-1:-1:-1;;;;;10245:94:3;;;10242:1109;;10355:43;10389:8;;10355:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10355:33:3;;-1:-1:-1;;;10355:43:3:i;:::-;10242:1109;;;10430:66;;;;;;;;;;;;;;;;;;3899:23;;;;;;;;3740:190;10430:66;-1:-1:-1;;;;;10418:78:3;;:8;-1:-1:-1;;;;;10418:78:3;;;10415:936;;10512:29;10532:8;;10512:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10512:19:3;;-1:-1:-1;;;10512:29:3:i;10415:936::-;10573:33;;;;;;;;;;;;-1:-1:-1;;;10573:33:3;;;;;-1:-1:-1;;;;;;;;;10561:45:3;;;10558:793;;10622:34;10647:8;;10622:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10622:24:3;;-1:-1:-1;;;10622:34:3:i;10558:793::-;10688:40;;;;;;;;;;;;-1:-1:-1;;;10688:40:3;;;;;-1:-1:-1;;;;;;;;;10676:52:3;;;10673:678;;10744:27;10762:8;;10744:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10744:17:3;;-1:-1:-1;;;10744:27:3:i;10673:678::-;10803:39;;;;;;;;;;;;-1:-1:-1;;;10803:39:3;;;;;-1:-1:-1;;;;;;;;;10791:51:3;;;10788:563;;10858:26;10875:8;;10858:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10858:16:3;;-1:-1:-1;;;10858:26:3:i;10788:563::-;10916:49;;;;;;;;;;;;;;;;;;3899:23;;;;;;;;3740:190;10916:49;-1:-1:-1;;;;;10904:61:3;;:8;-1:-1:-1;;;;;10904:61:3;;;10901:450;;10981:36;11008:8;;10981:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10981:26:3;;-1:-1:-1;;;10981:36:3:i;10901:450::-;11049:53;;;;;;;;;;;;;;;;;;3899:23;;;;;;;;3740:190;11049:53;-1:-1:-1;;;;;11037:65:3;;:8;-1:-1:-1;;;;;11037:65:3;;;11034:317;;11118:29;11138:8;;11118:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11118:19:3;;-1:-1:-1;;;11118:29:3:i;11034:317::-;11179:48;;;;;;;;;;;;;;;;;;3899:23;;;;;;;;3740:190;11179:48;-1:-1:-1;;;;;11167:60:3;;:8;-1:-1:-1;;;;;11167:60:3;;;11164:187;;11243:31;11265:8;;11243:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11243:21:3;;-1:-1:-1;;;11243:31:3:i;11164:187::-;11305:35;;-1:-1:-1;;;11305:35:3;;16026:2:8;11305:35:3;;;16008:21:8;16065:2;16045:18;;;16038:30;16104:27;16084:18;;;16077:55;16149:18;;11305:35:3;15824:349:8;11164:187:3;9748:1609;;;9613:1744;;;;;:::o;9394:213::-;9488:78;9502:5;9509:49;;;;;;;;;;;;;;;;;;3899:23;;;;;;;;3740:190;9488:78;9576:24;9587:5;9594;;9576:10;:24::i;7257:145::-;-1:-1:-1;;;;;7361:24:3;;7338:4;7361:24;;;:16;:24;;;;;;;;-1:-1:-1;;;;;;7361:34:3;;;;;;;;;;;;7257:145;;;;;:::o;1824:101:0:-;1094:13;:11;:13::i;:::-;1888:30:::1;1915:1;1888:18;:30::i;:::-;1824:101::o:0;5104:179:3:-;1094:13:0;:11;:13::i;:::-;-1:-1:-1;;;;;5195:26:3;::::1;;::::0;;;:16:::1;:26;::::0;;;;;;:33;;-1:-1:-1;;5195:33:3::1;5224:4;5195:33;::::0;;5243;::::1;::::0;::::1;::::0;5212:8;;5270:5;;;;5243:33:::1;:::i;11396:508::-:0;11489:21;11512:10;11539:8;11528:60;;;;;;;;;;;;:::i;:::-;11484:104;;;;;;;11607:21;11625:2;11607:17;:21::i;:::-;11599:110;;;;-1:-1:-1;;;11599:110:3;;17625:2:8;11599:110:3;;;17607:21:8;17664:2;17644:18;;;17637:30;17703:34;17683:18;;;17676:62;17774:34;17754:18;;;17747:62;-1:-1:-1;;;17825:19:8;;;17818:43;17878:19;;11599:110:3;17423:480:8;11599:110:3;11720:13;;11743:147;11767:4;:11;11763:1;:15;11743:147;;;11807:4;11812:1;11807:7;;;;;;;;:::i;:::-;;;;;;;11799:15;;11836:21;11851:5;11836:14;:21::i;:::-;11828:51;;;;-1:-1:-1;;;11828:51:3;;;;;;;:::i;:::-;11780:3;;11743:147;;;;11474:430;;;11396:508;:::o;16110:229::-;16193:13;16221:8;16210:31;;;;;;;;;;;;:::i;:::-;16192:49;;16260:21;16275:5;16260:14;:21::i;:::-;16252:80;;;;-1:-1:-1;;;16252:80:3;;;;;;;:::i;6866:161::-;1094:13:0;:11;:13::i;:::-;-1:-1:-1;;;;;6951:20:3;::::1;;::::0;;;:13:::1;:20;::::0;;;;;;:27;;-1:-1:-1;;6951:27:3::1;6974:4;6951:27;::::0;;6993;::::1;::::0;::::1;::::0;6965:5;;7014;;;;6993:27:::1;:::i;5701:221::-:0;1094:13:0;:11;:13::i;:::-;-1:-1:-1;;;;;5814:40:3;::::1;;::::0;;;:27:::1;:40;::::0;;;;;;5807:47;;-1:-1:-1;;5807:47:3::1;::::0;;5869:46;::::1;::::0;::::1;::::0;5842:11;;5909:5;;;;5869:46:::1;:::i;8837:276::-:0;8919:10;8946:8;8935:37;;;;;;;;;;;;:::i;:::-;8918:54;;;8990:42;9029:2;-1:-1:-1;;;;;8150:47:3;8127:4;8150:47;;;:37;:47;;;;;;;;:55;;:47;:55;;8040:172;8990:42;8982:124;;;;-1:-1:-1;;;8982:124:3;;18789:2:8;8982:124:3;;;18771:21:8;18828:2;18808:18;;;18801:30;18867:34;18847:18;;;18840:62;18938:34;18918:18;;;18911:62;-1:-1:-1;;;18989:19:8;;;18982:36;19035:19;;8982:124:3;18587:473:8;5928:221:3;1094:13:0;:11;:13::i;:::-;-1:-1:-1;;;;;6033:40:3;::::1;;::::0;;;:27:::1;:40;::::0;;;;;;:47;;-1:-1:-1;;6033:47:3::1;6076:4;6033:47;::::0;;6095;::::1;::::0;::::1;::::0;6061:11;;6136:5;;;;6095:47:::1;:::i;19125:729::-:0;19194:15;19219:16;19246:602;19283:17;:4;19298:1;19283:14;:17::i;:::-;19273:27;-1:-1:-1;19325:36:3;952:1;;1078:29;741:1;634:2;1078:29;:::i;:::-;:49;;;;:::i;:::-;:72;;;;:::i;:::-;19325:4;;:14;:36::i;:::-;19314:47;;19384:23;19399:7;19384:14;:23::i;:::-;19376:73;;;;-1:-1:-1;;;19376:73:3;;;;;;;:::i;:::-;19471:24;19486:8;19471:14;:24::i;:::-;19463:74;;;;-1:-1:-1;;;19463:74:3;;;;;;;:::i;:::-;952:1;;1078:29;741:1;634:2;1078:29;:::i;:::-;:49;;;;:::i;:::-;:72;;;;:::i;:::-;634:2;952:1;;1078:29;741:1;634:2;1078:29;:::i;:::-;:49;;;;:::i;:::-;:72;;;;:::i;:::-;1250:32;;;;:::i;:::-;1427:42;;;;:::i;:::-;19635:4;:11;:49;19631:207;;19711:68;952:1;;1078:29;741:1;634:2;1078:29;:::i;:::-;:49;;;;:::i;:::-;:72;;;;:::i;:::-;952:1;;1078:29;741:1;634:2;1078:29;:::i;:::-;:49;;;;:::i;:::-;:72;;;;:::i;:::-;19744:4;:11;:34;;;;:::i;19711:68::-;19704:75;;19246:602;;4931:167;1094:13:0;:11;:13::i;:::-;-1:-1:-1;;;;;5026:22:3;::::1;;::::0;;;:14:::1;:22;::::0;;;;;;5019:29;;-1:-1:-1;;5019:29:3::1;::::0;;5063:28;::::1;::::0;::::1;::::0;5041:6;;5085:5;;;;5063:28:::1;:::i;16534:368::-:0;16612:13;16627:16;16658:8;16647:40;;;;;;;;;;;;:::i;:::-;16611:76;;;;16714:21;16729:5;16714:14;:21::i;:::-;16706:80;;;;-1:-1:-1;;;16706:80:3;;;;;;;:::i;:::-;16804:27;16822:8;16804:17;:27::i;:::-;16796:99;;;;-1:-1:-1;;;16796:99:3;;20209:2:8;16796:99:3;;;20191:21:8;20248:2;20228:18;;;20221:30;20287:34;20267:18;;;20260:62;20358:29;20338:18;;;20331:57;20405:19;;16796:99:3;20007:423:8;8218:118:3;-1:-1:-1;;;;;8301:20:3;8278:4;8301:20;;;:13;:20;;;;;;;;:28;;:20;:28;;8218:118::o;7588:130::-;-1:-1:-1;;;;;7677:26:3;7654:4;7677:26;;;:16;:26;;;;;;;;:34;;:26;:34;;7588:130::o;20621:311::-;20696:13;20730:8;20719:52;;;;;;;;;;;;:::i;:::-;20695:76;;;;;20790:21;20805:5;20790:14;:21::i;:::-;20782:51;;;;-1:-1:-1;;;20782:51:3;;;;;;;:::i;4542:210::-;1094:13:0;:11;:13::i;:::-;-1:-1:-1;;;;;4656:24:3;::::1;;::::0;;;:16:::1;:24;::::0;;;;;;;-1:-1:-1;;;;;;4656:34:3;::::1;::::0;;;;;;;;;4649:41;;-1:-1:-1;;4649:41:3::1;::::0;;4705:40;::::1;::::0;::::1;::::0;4673:6;;4681:8;;4739:5;;;;4705:40:::1;:::i;12544:333::-:0;12620:31;12666:8;12655:41;;;;;;;;;;;;:::i;:::-;12619:77;;12723:35;12741:6;:16;;;12723:17;:35::i;:::-;12715:111;;;;-1:-1:-1;;;12715:111:3;;22429:2:8;12715:111:3;;;22411:21:8;22468:2;22448:18;;;22441:30;22507:34;22487:18;;;22480:62;22578:33;22558:18;;;22551:61;22629:19;;12715:111:3;22227:427:8;12715:111:3;12858:11;;12836:34;;:21;:34::i;12209:329::-;12284:30;12329:8;12318:40;;;;;;;;;;;;:::i;:::-;12283:75;;12385:35;12403:6;:16;;;12385:17;:35::i;:::-;12377:110;;;;-1:-1:-1;;;12377:110:3;;23244:2:8;12377:110:3;;;23226:21:8;23283:2;23263:18;;;23256:30;23322:34;23302:18;;;23295:62;23393:32;23373:18;;;23366:60;23443:19;;12377:110:3;23042:426:8;9119:269:3;9221:40;;;;;;;;;;;;-1:-1:-1;;;9221:40:3;;;;;9200:69;9214:5;3899:23;9221:40;3740:190;9200:69;9300:39;;;;;;;;;;;;-1:-1:-1;;;9300:39:3;;;;;9279:68;9293:5;3899:23;9300:39;3740:190;21404:339;21492:88;21506:11;21519:53;;;;;;;;;;;;;;;;;;3899:23;;;;;;;;3740:190;21492:88;21590:83;21604:11;21617:48;;;;;;;;;;;;;;;;;;3899:23;;;;;;;;3740:190;19860:603;19998:33;;;;;;;;;;;;-1:-1:-1;;;19998:33:3;;;;;19971:68;19985:11;3899:23;19998:33;3740:190;19971:68;20049:44;20074:11;20087:5;;20049:24;:44::i;:::-;20103;20128:11;20141:5;;20103:24;:44::i;:::-;20402:54;20437:11;20450:5;;20402:34;:54::i;2074:198:0:-;1094:13;:11;:13::i;:::-;-1:-1:-1;;;;;2162:22:0;::::1;2154:73;;;::::0;-1:-1:-1;;;2154:73:0;;23675:2:8;2154:73:0::1;::::0;::::1;23657:21:8::0;23714:2;23694:18;;;23687:30;23753:34;23733:18;;;23726:62;-1:-1:-1;;;23804:18:8;;;23797:36;23850:19;;2154:73:0::1;23473:402:8::0;2154:73:0::1;2237:28;2256:8;2237:18;:28::i;:::-;2074:198:::0;:::o;17078:359:3:-;17157:13;17172:16;17203:8;17192:40;;;;;;;;;;;;:::i;:::-;17156:76;;;;17259:21;17274:5;17259:14;:21::i;:::-;17251:70;;;;-1:-1:-1;;;17251:70:3;;24082:2:8;17251:70:3;;;24064:21:8;24121:2;24101:18;;;24094:30;24160:34;24140:18;;;24133:62;-1:-1:-1;;;24211:18:8;;;24204:34;24255:19;;17251:70:3;23880:400:8;7033:161:3;1094:13:0;:11;:13::i;:::-;-1:-1:-1;;;;;7126:20:3;::::1;;::::0;;;:13:::1;:20;::::0;;;;;;7119:27;;-1:-1:-1;;7119:27:3::1;::::0;;7161:26;::::1;::::0;::::1;::::0;7140:5;;7181;;;;7161:26:::1;:::i;4758:167::-:0;1094:13:0;:11;:13::i;:::-;-1:-1:-1;;;;;4845:22:3;::::1;;::::0;;;:14:::1;:22;::::0;;;;;;:29;;-1:-1:-1;;4845:29:3::1;4870:4;4845:29;::::0;;4889;::::1;::::0;::::1;::::0;4860:6;;4912:5;;;;4889:29:::1;:::i;1359:130:0:-:0;1247:7;1273:6;-1:-1:-1;;;;;1273:6:0;734:10:2;1422:23:0;1414:68;;;;-1:-1:-1;;;1414:68:0;;24487:2:8;1414:68:0;;;24469:21:8;;;24506:18;;;24499:30;24565:34;24545:18;;;24538:62;24617:18;;1414:68:0;24285:356:8;392:3007:6;514:12;562:7;546:12;562:7;556:2;546:12;:::i;:::-;:23;;538:50;;;;-1:-1:-1;;;538:50:6;;24848:2:8;538:50:6;;;24830:21:8;24887:2;24867:18;;;24860:30;-1:-1:-1;;;24906:18:8;;;24899:44;24960:18;;538:50:6;24646:338:8;538:50:6;626:6;606:16;615:7;626:6;606:16;:::i;:::-;:26;;598:53;;;;-1:-1:-1;;;598:53:6;;24848:2:8;598:53:6;;;24830:21:8;24887:2;24867:18;;;24860:30;-1:-1:-1;;;24906:18:8;;;24899:44;24960:18;;598:53:6;24646:338:8;598:53:6;686:16;695:7;686:6;:16;:::i;:::-;669:6;:13;:33;;661:63;;;;-1:-1:-1;;;661:63:6;;25191:2:8;661:63:6;;;25173:21:8;25230:2;25210:18;;;25203:30;-1:-1:-1;;;25249:18:8;;;25242:47;25306:18;;661:63:6;24989:341:8;661:63:6;735:22;798:15;;830:2099;;;;3082:4;3076:11;3063:24;;3280:1;3269:9;3262:20;3332:4;3321:9;3317:20;3311:4;3304:34;791:2565;;830:2099;1024:4;1018:11;1005:24;;1719:2;1710:7;1706:16;2121:9;2114:17;2108:4;2104:28;2092:9;2081;2077:25;2073:60;2173:7;2169:2;2165:16;2441:6;2427:9;2420:17;2414:4;2410:28;2398:9;2390:6;2386:22;2382:57;2378:70;2203:461;2478:3;2474:2;2471:11;2203:461;;;2632:9;;2621:21;;2523:4;2515:13;;;;2559;2203:461;;;-1:-1:-1;;2686:26:6;;;2906:2;2889:11;-1:-1:-1;;2885:25:6;2879:4;2872:39;-1:-1:-1;791:2565:6;-1:-1:-1;3383:9:6;392:3007;-1:-1:-1;;;;392:3007:6:o;1779:314:7:-;1883:14;;;1983:17;:4;1883:14;1983;:17::i;:::-;1974:26;-1:-1:-1;2016:24:7;:4;304:2;2016:13;:24::i;:::-;2010:30;-1:-1:-1;2059:27:7;507:20;397:1;304:2;507:20;:::i;:::-;2059:4;;:14;:27::i;:::-;2050:36;;1779:314;;;;;:::o;992:138::-;1060:4;507:20;397:1;304:2;507:20;:::i;:::-;304:2;507:20;397:1;304:2;507:20;:::i;:::-;618:23;;;;:::i;:::-;777:24;;;;:::i;:::-;1083:4;:11;:40;;1076:47;;992:138;;;:::o;2635:149::-;2696:12;2727:50;507:20;397:1;304:2;507:20;:::i;:::-;;397:1;304:2;507:20;:::i;:::-;2751:4;:11;:25;;;;:::i;:::-;2727:4;;:50;:10;:50::i;2426:187:0:-;2499:16;2518:6;;-1:-1:-1;;;;;2534:17:0;;;-1:-1:-1;;;;;;2534:17:0;;;;;;2566:40;;2518:6;;;;;;;2566:40;;2499:16;2566:40;2489:124;2426:187;:::o;3405:416:6:-;3484:7;3526:6;3511:11;3526:6;3520:2;3511:11;:::i;:::-;:21;;3503:52;;;;-1:-1:-1;;;3503:52:6;;25537:2:8;3503:52:6;;;25519:21:8;25576:2;25556:18;;;25549:30;-1:-1:-1;;;25595:18:8;;;25588:48;25653:18;;3503:52:6;25335:342:8;3503:52:6;3590:11;:6;3599:2;3590:11;:::i;:::-;3573:6;:13;:28;;3565:62;;;;-1:-1:-1;;;3565:62:6;;25884:2:8;3565:62:6;;;25866:21:8;25923:2;25903:18;;;25896:30;-1:-1:-1;;;25942:18:8;;;25935:51;26003:18;;3565:62:6;25682:345:8;3565:62:6;-1:-1:-1;3715:30:6;3731:4;3715:30;3709:37;-1:-1:-1;;;3705:71:6;;;3405:416::o;3827:365::-;3905:6;3945;3931:10;3945:6;3940:1;3931:10;:::i;:::-;:20;;3923:50;;;;-1:-1:-1;;;3923:50:6;;26234:2:8;3923:50:6;;;26216:21:8;26273:2;26253:18;;;26246:30;-1:-1:-1;;;26292:18:8;;;26285:47;26349:18;;3923:50:6;26032:341:8;3923:50:6;4008:10;:6;4017:1;4008:10;:::i;:::-;3991:6;:13;:27;;3983:60;;;;-1:-1:-1;;;3983:60:6;;26580:2:8;3983:60:6;;;26562:21:8;26619:2;26599:18;;;26592:30;-1:-1:-1;;;26638:18:8;;;26631:50;26698:18;;3983:60:6;26378:344:8;3983:60:6;-1:-1:-1;4120:29:6;4136:3;4120:29;4114:36;;3827:365::o;14:131:8:-;-1:-1:-1;;;;;89:31:8;;79:42;;69:70;;135:1;132;125:12;150:348;202:8;212:6;266:3;259:4;251:6;247:17;243:27;233:55;;284:1;281;274:12;233:55;-1:-1:-1;307:20:8;;-1:-1:-1;;;;;339:30:8;;336:50;;;382:1;379;372:12;336:50;419:4;411:6;407:17;395:29;;471:3;464:4;455:6;447;443:19;439:30;436:39;433:59;;;488:1;485;478:12;433:59;150:348;;;;;:::o;503:546::-;583:6;591;599;652:2;640:9;631:7;627:23;623:32;620:52;;;668:1;665;658:12;620:52;707:9;694:23;726:31;751:5;726:31;:::i;:::-;776:5;-1:-1:-1;832:2:8;817:18;;804:32;-1:-1:-1;;;;;848:30:8;;845:50;;;891:1;888;881:12;845:50;930:59;981:7;972:6;961:9;957:22;930:59;:::i;:::-;503:546;;1008:8;;-1:-1:-1;904:85:8;;-1:-1:-1;;;;503:546:8:o;1054:127::-;1115:10;1110:3;1106:20;1103:1;1096:31;1146:4;1143:1;1136:15;1170:4;1167:1;1160:15;1186:275;1257:2;1251:9;1322:2;1303:13;;-1:-1:-1;;1299:27:8;1287:40;;-1:-1:-1;;;;;1342:34:8;;1378:22;;;1339:62;1336:88;;;1404:18;;:::i;:::-;1440:2;1433:22;1186:275;;-1:-1:-1;1186:275:8:o;1466:186::-;1514:4;-1:-1:-1;;;;;1539:6:8;1536:30;1533:56;;;1569:18;;:::i;:::-;-1:-1:-1;1635:2:8;1614:15;-1:-1:-1;;1610:29:8;1641:4;1606:40;;1466:186::o;1657:671::-;1725:6;1778:2;1766:9;1757:7;1753:23;1749:32;1746:52;;;1794:1;1791;1784:12;1746:52;1834:9;1821:23;-1:-1:-1;;;;;1859:6:8;1856:30;1853:50;;;1899:1;1896;1889:12;1853:50;1922:22;;1975:4;1967:13;;1963:27;-1:-1:-1;1953:55:8;;2004:1;2001;1994:12;1953:55;2040:2;2027:16;2065:48;2081:31;2109:2;2081:31;:::i;:::-;2065:48;:::i;:::-;2136:2;2129:5;2122:17;2176:7;2171:2;2166;2162;2158:11;2154:20;2151:33;2148:53;;;2197:1;2194;2187:12;2148:53;2252:2;2247;2243;2239:11;2234:2;2227:5;2223:14;2210:45;2296:1;2275:14;;;2291:2;2271:23;2264:34;;;;2279:5;1657:671;-1:-1:-1;;;;1657:671:8:o;2333:247::-;2392:6;2445:2;2433:9;2424:7;2420:23;2416:32;2413:52;;;2461:1;2458;2451:12;2413:52;2500:9;2487:23;2519:31;2544:5;2519:31;:::i;:::-;2569:5;2333:247;-1:-1:-1;;;2333:247:8:o;2777:173::-;2844:20;;-1:-1:-1;;;;;;2893:32:8;;2883:43;;2873:71;;2940:1;2937;2930:12;2873:71;2777:173;;;:::o;2955:618::-;3043:6;3051;3059;3067;3120:2;3108:9;3099:7;3095:23;3091:32;3088:52;;;3136:1;3133;3126:12;3088:52;3175:9;3162:23;3194:31;3219:5;3194:31;:::i;:::-;3244:5;-1:-1:-1;3268:37:8;3301:2;3286:18;;3268:37;:::i;:::-;3258:47;;3356:2;3345:9;3341:18;3328:32;-1:-1:-1;;;;;3375:6:8;3372:30;3369:50;;;3415:1;3412;3405:12;3369:50;3454:59;3505:7;3496:6;3485:9;3481:22;3454:59;:::i;:::-;2955:618;;;;-1:-1:-1;3532:8:8;-1:-1:-1;;;;2955:618:8:o;3578:686::-;3666:6;3674;3682;3690;3743:2;3731:9;3722:7;3718:23;3714:32;3711:52;;;3759:1;3756;3749:12;3711:52;3798:9;3785:23;3817:31;3842:5;3817:31;:::i;:::-;3867:5;-1:-1:-1;3924:2:8;3909:18;;3896:32;3937:33;3896:32;3937:33;:::i;4269:319::-;4336:6;4344;4397:2;4385:9;4376:7;4372:23;4368:32;4365:52;;;4413:1;4410;4403:12;4365:52;4452:9;4439:23;4471:31;4496:5;4471:31;:::i;:::-;4521:5;-1:-1:-1;4545:37:8;4578:2;4563:18;;4545:37;:::i;:::-;4535:47;;4269:319;;;;;:::o;5864:267::-;5953:6;5948:3;5941:19;6005:6;5998:5;5991:4;5986:3;5982:14;5969:43;-1:-1:-1;6057:1:8;6032:16;;;6050:4;6028:27;;;6021:38;;;;6113:2;6092:15;;;-1:-1:-1;;6088:29:8;6079:39;;;6075:50;;5864:267::o;6136:344::-;-1:-1:-1;;;;;6323:32:8;;6305:51;;6392:2;6387;6372:18;;6365:30;;;-1:-1:-1;;6412:62:8;;6455:18;;6447:6;6439;6412:62;:::i;:::-;6404:70;6136:344;-1:-1:-1;;;;;6136:344:8:o;6485:181::-;6543:4;-1:-1:-1;;;;;6568:6:8;6565:30;6562:56;;;6598:18;;:::i;:::-;-1:-1:-1;6643:1:8;6639:14;6655:4;6635:25;;6485:181::o;6671:587::-;6724:5;6777:3;6770:4;6762:6;6758:17;6754:27;6744:55;;6795:1;6792;6785:12;6744:55;6824:6;6818:13;6855:48;6871:31;6899:2;6871:31;:::i;6855:48::-;6928:2;6919:7;6912:19;6950:4;6997:3;6990:4;6985:2;6977:6;6973:15;6969:26;6966:35;6963:55;;;7014:1;7011;7004:12;6963:55;7036:1;7046:134;7060:2;7057:1;7054:9;7046:134;;;7149:14;;;7145:23;;7139:30;7117:15;;;7113:24;;7106:64;7071:10;;7046:134;;;-1:-1:-1;;7225:1:8;7200:16;;;7218:4;7196:27;7189:38;;;;7204:7;6671:587;-1:-1:-1;;;6671:587:8:o;7263:1130::-;7367:6;7398:2;7441;7429:9;7420:7;7416:23;7412:32;7409:52;;;7457:1;7454;7447:12;7409:52;7490:9;7484:16;-1:-1:-1;;;;;7560:2:8;7552:6;7549:14;7546:34;;;7576:1;7573;7566:12;7546:34;7614:6;7603:9;7599:22;7589:32;;7659:7;7652:4;7648:2;7644:13;7640:27;7630:55;;7681:1;7678;7671:12;7630:55;7710:2;7704:9;7733:58;7749:41;7787:2;7749:41;:::i;7733:58::-;7825:15;;;7907:1;7903:10;;;;7895:19;;7891:28;;;7856:12;;;;7931:19;;;7928:39;;;7963:1;7960;7953:12;7928:39;7995:2;7991;7987:11;8007:356;8023:6;8018:3;8015:15;8007:356;;;8102:3;8096:10;8138:2;8125:11;8122:19;8119:109;;;8182:1;8211:2;8207;8200:14;8119:109;8253:67;8312:7;8307:2;8293:11;8289:2;8285:20;8281:29;8253:67;:::i;:::-;8241:80;;-1:-1:-1;8341:12:8;;;;8040;;8007:356;;;-1:-1:-1;8382:5:8;7263:1130;-1:-1:-1;;;;;;;;7263:1130:8:o;8398:127::-;8459:10;8454:3;8450:20;8447:1;8440:31;8490:4;8487:1;8480:15;8514:4;8511:1;8504:15;8530:361;8647:12;;8695:4;8684:16;;8678:23;-1:-1:-1;;;;;;8758:11:8;;;;8647:12;8678:23;8792:1;8781:13;;8778:107;;;8872:2;8866;8856:6;8853:1;8849:14;8846:1;8842:22;8838:31;8834:2;8830:40;8826:49;8817:58;;8778:107;;;;8530:361;;;:::o;8896:127::-;8957:10;8952:3;8948:20;8945:1;8938:31;8988:4;8985:1;8978:15;9012:4;9009:1;9002:15;9028:128;9095:9;;;9116:11;;;9113:37;;;9130:18;;:::i;9581:146::-;9668:13;;9690:31;9668:13;9690:31;:::i;9732:320::-;9819:6;9827;9880:2;9868:9;9859:7;9855:23;9851:32;9848:52;;;9896:1;9893;9886:12;9848:52;9928:9;9922:16;9947:31;9972:5;9947:31;:::i;:::-;10042:2;10027:18;;;;10021:25;9997:5;;10021:25;;-1:-1:-1;;;9732:320:8:o;10486:404::-;10688:2;10670:21;;;10727:2;10707:18;;;10700:30;10766:34;10761:2;10746:18;;10739:62;-1:-1:-1;;;10832:2:8;10817:18;;10810:38;10880:3;10865:19;;10486:404::o;10895:396::-;10983:6;10991;11044:2;11032:9;11023:7;11019:23;11015:32;11012:52;;;11060:1;11057;11050:12;11012:52;11089:9;11083:16;11073:26;;11143:2;11132:9;11128:18;11122:25;-1:-1:-1;;;;;11162:6:8;11159:30;11156:50;;;11202:1;11199;11192:12;11156:50;11225:60;11277:7;11268:6;11257:9;11253:22;11225:60;:::i;:::-;11215:70;;;10895:396;;;;;:::o;12125:135::-;12164:3;12185:17;;;12182:43;;12205:18;;:::i;:::-;-1:-1:-1;12252:1:8;12241:13;;12125:135::o;12265:440::-;-1:-1:-1;;;;;12478:32:8;;12460:51;;-1:-1:-1;;;;;;12547:33:8;;12542:2;12527:18;;12520:61;12617:2;12612;12597:18;;12590:30;;;-1:-1:-1;;12637:62:8;;12680:18;;12672:6;12664;12637:62;:::i;:::-;12629:70;12265:440;-1:-1:-1;;;;;;12265:440:8:o;12710:462::-;12814:6;12822;12830;12883:2;12871:9;12862:7;12858:23;12854:32;12851:52;;;12899:1;12896;12889:12;12851:52;12931:9;12925:16;12950:31;12975:5;12950:31;:::i;:::-;13045:2;13030:18;;13024:25;13094:2;13079:18;;13073:25;13000:5;;-1:-1:-1;13024:25:8;-1:-1:-1;13107:33:8;13073:25;13107:33;:::i;:::-;13159:7;13149:17;;;12710:462;;;;;:::o;13177:341::-;13379:2;13361:21;;;13418:2;13398:18;;;13391:30;-1:-1:-1;;;13452:2:8;13437:18;;13430:47;13509:2;13494:18;;13177:341::o;13933:457::-;14030:6;14038;14046;14099:2;14087:9;14078:7;14074:23;14070:32;14067:52;;;14115:1;14112;14105:12;14067:52;14144:9;14138:16;14128:26;;14194:2;14183:9;14179:18;14173:25;14163:35;;14242:2;14231:9;14227:18;14221:25;-1:-1:-1;;;;;14261:6:8;14258:30;14255:50;;;14301:1;14298;14291:12;14255:50;14324:60;14376:7;14367:6;14356:9;14352:22;14324:60;:::i;:::-;14314:70;;;13933:457;;;;;:::o;14756:331::-;14861:9;14872;14914:8;14902:10;14899:24;14896:44;;;14936:1;14933;14926:12;14896:44;14965:6;14955:8;14952:20;14949:40;;;14985:1;14982;14975:12;14949:40;-1:-1:-1;;15011:23:8;;;15056:25;;;;;-1:-1:-1;14756:331:8:o;15092:323::-;-1:-1:-1;;;;;;15212:19:8;;15288:11;;;;15319:1;15311:10;;15308:101;;;15396:2;15390;15383:3;15380:1;15376:11;15373:1;15369:19;15365:28;15361:2;15357:37;15353:46;15344:55;;15308:101;;;15092:323;;;;:::o;16178:1240::-;16317:6;16325;16333;16341;16349;16402:3;16390:9;16381:7;16377:23;16373:33;16370:53;;;16419:1;16416;16409:12;16370:53;16448:9;16442:16;16432:26;;16477:2;16519;16508:9;16504:18;16498:25;16488:35;;16567:2;16556:9;16552:18;16546:25;-1:-1:-1;;;;;16586:6:8;16583:30;16580:50;;;16626:1;16623;16616:12;16580:50;16649:22;;16702:4;16694:13;;16690:27;-1:-1:-1;16680:55:8;;16731:1;16728;16721:12;16680:55;16760:2;16754:9;16783:58;16799:41;16837:2;16799:41;:::i;16783:58::-;16875:15;;;16957:1;16953:10;;;;16945:19;;16941:28;;;16906:12;;;;16981:19;;;16978:39;;;17013:1;17010;17003:12;16978:39;17037:11;;;;17057:210;17073:6;17068:3;17065:15;17057:210;;;17146:3;17140:10;17163:31;17188:5;17163:31;:::i;:::-;17207:18;;17090:12;;;;17245;;;;17057:210;;;17286:5;17276:15;;;;;;;17310:57;17363:2;17352:9;17348:18;17310:57;:::i;:::-;17300:67;;17407:3;17396:9;17392:19;17386:26;17376:36;;16178:1240;;;;;;;;:::o;17908:259::-;17986:6;18039:2;18027:9;18018:7;18014:23;18010:32;18007:52;;;18055:1;18052;18045:12;18007:52;18087:9;18081:16;18106:31;18131:5;18106:31;:::i;18172:410::-;18374:2;18356:21;;;18413:2;18393:18;;;18386:30;18452:34;18447:2;18432:18;;18425:62;-1:-1:-1;;;18518:2:8;18503:18;;18496:44;18572:3;18557:19;;18172:410::o;19065:125::-;19130:9;;;19151:10;;;19148:36;;;19164:18;;:::i;19195:401::-;19397:2;19379:21;;;19436:2;19416:18;;;19409:30;19475:34;19470:2;19455:18;;19448:62;-1:-1:-1;;;19541:2:8;19526:18;;19519:35;19586:3;19571:19;;19195:401::o;19601:::-;19696:6;19704;19757:2;19745:9;19736:7;19732:23;19728:32;19725:52;;;19773:1;19770;19763:12;19725:52;19805:9;19799:16;19824:31;19849:5;19824:31;:::i;:::-;19924:2;19909:18;;19903:25;19874:5;;-1:-1:-1;19937:33:8;19903:25;19937:33;:::i;:::-;19989:7;19979:17;;;19601:401;;;;;:::o;20435:524::-;20548:6;20556;20564;20572;20625:3;20613:9;20604:7;20600:23;20596:33;20593:53;;;20642:1;20639;20632:12;20593:53;20674:9;20668:16;20693:31;20718:5;20693:31;:::i;:::-;20788:2;20773:18;;20767:25;20837:2;20822:18;;20816:25;20743:5;;-1:-1:-1;20767:25:8;-1:-1:-1;20850:33:8;20816:25;20850:33;:::i;:::-;20949:2;20934:18;;;;20928:25;20435:524;;;;-1:-1:-1;;;20435:524:8:o;20964:874::-;21039:5;21087:4;21075:9;21070:3;21066:19;21062:30;21059:50;;;21105:1;21102;21095:12;21059:50;21138:2;21132:9;21180:4;21172:6;21168:17;-1:-1:-1;;;;;21272:6:8;21260:10;21257:22;21252:2;21240:10;21237:18;21234:46;21231:72;;;21283:18;;:::i;:::-;21323:10;21319:2;21312:22;21352:6;21343:15;;21387:9;21381:16;21367:30;;21420:2;21412:6;21409:14;21406:34;;;21436:1;21433;21426:12;21406:34;;21464:56;21516:3;21507:6;21496:9;21492:22;21464:56;:::i;:::-;21456:6;21449:72;;21566:2;21555:9;21551:18;21545:25;21579:33;21604:7;21579:33;:::i;:::-;21645:7;21640:2;21632:6;21628:15;21621:32;;21707:2;21696:9;21692:18;21686:25;21681:2;21673:6;21669:15;21662:50;21766:2;21755:9;21751:18;21745:25;21740:2;21732:6;21728:15;21721:50;21826:3;21815:9;21811:19;21805:26;21799:3;21791:6;21787:16;21780:52;;20964:874;;;;:::o;21843:379::-;21947:6;22000:2;21988:9;21979:7;21975:23;21971:32;21968:52;;;22016:1;22013;22006:12;21968:52;22049:9;22043:16;-1:-1:-1;;;;;22074:6:8;22071:30;22068:50;;;22114:1;22111;22104:12;22068:50;22137:79;22208:7;22199:6;22188:9;22184:22;22137:79;:::i;:::-;22127:89;21843:379;-1:-1:-1;;;;21843:379:8:o","linkReferences":{}},"methodIdentifiers":{"allowApprovalDestination(address,string)":"98b3cc39","allowAsset(address,string)":"86b6dbe5","allowCallSite(address,bytes4,string)":"5e4ccace","allowDelegationApprovalDestination(address,string)":"63cc17f2","allowReceiver(address,string)":"72e548a9","allowSender(address,string)":"fa2c59c8","allowWithdrawDestination(address,string)":"5ace1d92","allowedApprovalDestinations(address)":"eb0de042","allowedAssets(address)":"a4c1cccb","allowedCallSites(address,bytes4)":"a847cf4d","allowedDelegationApprovalDestinations(address)":"4b941268","allowedReceivers(address)":"3cf20025","allowedSenders(address)":"fadbcf48","allowedWithdrawDestinations(address)":"07ef00cf","callSiteCount()":"a9fc3d4f","getGovernanceAddress()":"73252494","getInternalVersion()":"fdedfa27","isAllowedApprovalDestination(address)":"1d49039c","isAllowedAsset(address)":"c537bed0","isAllowedCallSite(address,bytes4)":"713ebf3b","isAllowedDelegationApprovalDestination(address)":"2dc32a61","isAllowedReceiver(address)":"d075f9bb","isAllowedSender(address)":"be8c97b0","isAllowedWithdrawDestination(address)":"efb47bff","owner()":"8da5cb5b","removeApprovalDestination(address,string)":"04a3ba25","removeAsset(address,string)":"f901dc33","removeCallSite(address,bytes4,string)":"d7334c9d","removeDelegationApprovalDestination(address,string)":"f259a073","removeReceiver(address,string)":"2d12d788","removeSender(address,string)":"a67e1f54","removeWithdrawDestination(address,string)":"8c2fdf9e","renounceOwnership()":"715018a6","transferOwnership(address)":"f2fde38b","validate1deltaPath(bytes)":"a1b6b430","validateCall(address,address,bytes)":"6d5025f1","validateUniswapV3Path(bytes)":"1c123e77","validate_1deltaDeposit(bytes)":"c4cc9dba","validate_1deltaMulticall(bytes)":"07ac3562","validate_1deltaWithdraw(bytes)":"f76081e4","validate_aaveSupply(bytes)":"d4c0fe45","validate_aaveWithdraw(bytes)":"6a6d5cc8","validate_approve(bytes)":"4b956bd8","validate_approveDelegation(bytes)":"957dc6c0","validate_exactInput(bytes)":"ebe26816","validate_exactOutput(bytes)":"e98539c5","validate_flashSwapAllOut(bytes)":"425f49d0","validate_flashSwapExactInt(bytes)":"ca963c50","validate_flashSwapExactOut(bytes)":"6ad11353","validate_swapExactTokensForTokens(bytes)":"761bcd9c","validate_transfer(bytes)":"1710a4f2","validate_transferERC20AllIn(bytes)":"7ea44655","validate_transferERC20In(bytes)":"59b92be9","whitelistAaveV3(address,string)":"f20e85e0","whitelistOnedelta(address,address,string)":"f26749f3","whitelistToken(address,string)":"ee5462cc","whitelistTokenForDelegation(address,string)":"6d9a1423","whitelistUniswapV2Router(address,string)":"3ea35551","whitelistUniswapV3Router(address,string)":"34ec8d7e"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"ApprovalDestinationApproved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"ApprovalDestinationRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"AssetApproved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"AssetRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"CallSiteApproved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"CallSiteRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"DelegationApprovalDestinationApproved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"DelegationApprovalDestinationRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"ReceiverApproved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"ReceiverRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"SenderApproved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"SenderRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"WithdrawDestinationApproved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"WithdrawDestinationRemoved\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"allowApprovalDestination\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"allowAsset\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"allowCallSite\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"allowDelegationApprovalDestination\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"allowReceiver\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"allowSender\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"allowWithdrawDestination\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"}],\"name\":\"allowedApprovalDestinations\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"allowedAssets\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"allowedCallSites\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"}],\"name\":\"allowedDelegationApprovalDestinations\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"allowedReceivers\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"allowedSenders\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"}],\"name\":\"allowedWithdrawDestinations\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"callSiteCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGovernanceAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getInternalVersion\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"isAllowedApprovalDestination\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"isAllowedAsset\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"isAllowedCallSite\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"isAllowedDelegationApprovalDestination\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"isAllowedReceiver\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"isAllowedSender\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"isAllowedWithdrawDestination\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"removeApprovalDestination\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"removeAsset\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"removeCallSite\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"removeDelegationApprovalDestination\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"removeReceiver\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"removeSender\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"removeWithdrawDestination\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"path\",\"type\":\"bytes\"}],\"name\":\"validate1deltaPath\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"callDataWithSelector\",\"type\":\"bytes\"}],\"name\":\"validateCall\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"path\",\"type\":\"bytes\"}],\"name\":\"validateUniswapV3Path\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"name\":\"validate_1deltaDeposit\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"name\":\"validate_1deltaMulticall\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"name\":\"validate_1deltaWithdraw\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"name\":\"validate_aaveSupply\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"name\":\"validate_aaveWithdraw\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"name\":\"validate_approve\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"name\":\"validate_approveDelegation\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"name\":\"validate_exactInput\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"name\":\"validate_exactOutput\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"name\":\"validate_flashSwapAllOut\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"name\":\"validate_flashSwapExactInt\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"name\":\"validate_flashSwapExactOut\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"name\":\"validate_swapExactTokensForTokens\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"name\":\"validate_transfer\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"name\":\"validate_transferERC20AllIn\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"name\":\"validate_transferERC20In\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"lendingPool\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"whitelistAaveV3\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"brokerProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"lendingPool\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"whitelistOnedelta\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"whitelistToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"whitelistTokenForDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"whitelistUniswapV2Router\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"whitelistUniswapV3Router\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"stateVariables\":{\"ADDR_SIZE\":{\"details\":\"The length of the bytes encoded address\"},\"ONEDELTA_ACTION_SIZE\":{\"details\":\"The length of the bytes encoded action\"},\"ONEDELTA_FEE_SIZE\":{\"details\":\"The length of the bytes encoded pool fee\"},\"ONEDELTA_MULTIPLE_POOLS_MIN_LENGTH\":{\"details\":\"The minimum length of an encoding that contains 2 or more pools\"},\"ONEDELTA_NEXT_OFFSET\":{\"details\":\"The offset of a single token address, fee, pid and action\"},\"ONEDELTA_PID_SIZE\":{\"details\":\"The length of the bytes encoded DEX ID\"},\"ONEDELTA_POP_OFFSET\":{\"details\":\"The offset of an encoded pool key\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getGovernanceAddress()\":{\"notice\":\"Get the address of the proto DAO\"},\"getInternalVersion()\":{\"notice\":\"Track version during internal development. We bump up when new whitelistings added.\"},\"validate1deltaPath(bytes)\":{\"notice\":\"Our implementation of 1delta path decoding and validation using similar approach as Uniswap v3 `Path.sol` Read more: - How 1delta encodes the path: https://github.com/1delta-DAO/contracts-delegation/blob/4f27e1593c564c419ff042cdd932ed52d04216bf/test-ts/1delta/shared/aggregatorPath.ts#L5-L32 - How 1delta decodes the path: https://github.com/1delta-DAO/contracts-delegation/blob/4f27e1593c564c419ff042cdd932ed52d04216bf/contracts/1delta/modules/aave/MarginTrading.sol#L54-L60\"}},\"notice\":\"Prototype guard implementation. - Hardcoded actions for Uniswap v2, v3, 1delta\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/GuardV0.sol\":\"GuardV0\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/=lib/openzeppelin-contracts/contracts/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin/=lib/openzeppelin-contracts/contracts/\"]},\"sources\":{\"lib/openzeppelin-contracts/contracts/access/Ownable.sol\":{\"keccak256\":\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fc980984badf3984b6303b377711220e067722bbd6a135b24669ff5069ef9f32\",\"dweb:/ipfs/QmPHXMSXj99XjSVM21YsY6aNtLLjLVXDbyN76J5HQYvvrz\"]},\"lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"keccak256\":\"0xa92e4fa126feb6907daa0513ddd816b2eb91f30a808de54f63c17d0e162c3439\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a367861093b74443b137564d3f3c472f70bcf114739e62059c939f25e315706c\",\"dweb:/ipfs/Qmd7JMpcxD9RuQjK3uM3EzJUgSqdN8vzp8eytEiuwxQJ6h\"]},\"src/GuardV0.sol\":{\"keccak256\":\"0x26ebef3fcd081d578584bba1b83fd14e6890d9b150d1458c2e51f3781d9dfdad\",\"urls\":[\"bzz-raw://d28b1816517f51101c33391dcddf36320f7e6c84e37ea9e9e2a6648034a9c6f0\",\"dweb:/ipfs/QmeRkLiNABnpUCu5XA9UKVkZ5VZV7yTnhogwwcz7v8sTwU\"]},\"src/IGuard.sol\":{\"keccak256\":\"0xb7b3ef010870980bd812779fd5dc8133d6dccb0e2b5d390dcfdc7a61c5064559\",\"urls\":[\"bzz-raw://17226392a130d807b0e1cd46f3b3fa8bf36d4f4cac6218f09d2dca75605945a3\",\"dweb:/ipfs/QmYgn6g7B2wU6VYrhtZicWohw795yyu6qUD1riWaG2hikD\"]},\"src/lib/BytesLib.sol\":{\"keccak256\":\"0x7446c0f0de6eb147f0f3e40b3a72e39d02a951e8c453437dcc6b3c06007bc62a\",\"license\":\"Unlicense\",\"urls\":[\"bzz-raw://1b2b64668ea4287dfe75e1029fef387b0e3ae191b784d1bc5be01edac6d1d5c5\",\"dweb:/ipfs/Qma3zAe3Svez1kdGc5F356m9tRjCDg8F8tAocbd5Qk13PE\"]},\"src/lib/Path.sol\":{\"keccak256\":\"0xb22c562b5175d50dbcc2224325666090d985f052abdcfe275c8dfc884e34de61\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://27aeff27314476ab3c77313ae1f0c5b2442b86315f5ce741cb2150a87c3cbad3\",\"dweb:/ipfs/QmQNno2g1CJvjnH6ych4LuHr1UZDEZPACgYG4XvivxGrqV\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.23+commit.f704f362"},"language":"Solidity","output":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":false},{"internalType":"string","name":"notes","type":"string","indexed":false}],"type":"event","name":"ApprovalDestinationApproved","anonymous":false},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":false},{"internalType":"string","name":"notes","type":"string","indexed":false}],"type":"event","name":"ApprovalDestinationRemoved","anonymous":false},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":false},{"internalType":"string","name":"notes","type":"string","indexed":false}],"type":"event","name":"AssetApproved","anonymous":false},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":false},{"internalType":"string","name":"notes","type":"string","indexed":false}],"type":"event","name":"AssetRemoved","anonymous":false},{"inputs":[{"internalType":"address","name":"target","type":"address","indexed":false},{"internalType":"bytes4","name":"selector","type":"bytes4","indexed":false},{"internalType":"string","name":"notes","type":"string","indexed":false}],"type":"event","name":"CallSiteApproved","anonymous":false},{"inputs":[{"internalType":"address","name":"target","type":"address","indexed":false},{"internalType":"bytes4","name":"selector","type":"bytes4","indexed":false},{"internalType":"string","name":"notes","type":"string","indexed":false}],"type":"event","name":"CallSiteRemoved","anonymous":false},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":false},{"internalType":"string","name":"notes","type":"string","indexed":false}],"type":"event","name":"DelegationApprovalDestinationApproved","anonymous":false},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":false},{"internalType":"string","name":"notes","type":"string","indexed":false}],"type":"event","name":"DelegationApprovalDestinationRemoved","anonymous":false},{"inputs":[{"internalType":"address","name":"previousOwner","type":"address","indexed":true},{"internalType":"address","name":"newOwner","type":"address","indexed":true}],"type":"event","name":"OwnershipTransferred","anonymous":false},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":false},{"internalType":"string","name":"notes","type":"string","indexed":false}],"type":"event","name":"ReceiverApproved","anonymous":false},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":false},{"internalType":"string","name":"notes","type":"string","indexed":false}],"type":"event","name":"ReceiverRemoved","anonymous":false},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":false},{"internalType":"string","name":"notes","type":"string","indexed":false}],"type":"event","name":"SenderApproved","anonymous":false},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":false},{"internalType":"string","name":"notes","type":"string","indexed":false}],"type":"event","name":"SenderRemoved","anonymous":false},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":false},{"internalType":"string","name":"notes","type":"string","indexed":false}],"type":"event","name":"WithdrawDestinationApproved","anonymous":false},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":false},{"internalType":"string","name":"notes","type":"string","indexed":false}],"type":"event","name":"WithdrawDestinationRemoved","anonymous":false},{"inputs":[{"internalType":"address","name":"destination","type":"address"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"allowApprovalDestination"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"allowAsset"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes4","name":"selector","type":"bytes4"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"allowCallSite"},{"inputs":[{"internalType":"address","name":"destination","type":"address"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"allowDelegationApprovalDestination"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"allowReceiver"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"allowSender"},{"inputs":[{"internalType":"address","name":"destination","type":"address"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"allowWithdrawDestination"},{"inputs":[{"internalType":"address","name":"destination","type":"address"}],"stateMutability":"view","type":"function","name":"allowedApprovalDestinations","outputs":[{"internalType":"bool","name":"allowed","type":"bool"}]},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"stateMutability":"view","type":"function","name":"allowedAssets","outputs":[{"internalType":"bool","name":"allowed","type":"bool"}]},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes4","name":"selector","type":"bytes4"}],"stateMutability":"view","type":"function","name":"allowedCallSites","outputs":[{"internalType":"bool","name":"allowed","type":"bool"}]},{"inputs":[{"internalType":"address","name":"destination","type":"address"}],"stateMutability":"view","type":"function","name":"allowedDelegationApprovalDestinations","outputs":[{"internalType":"bool","name":"allowed","type":"bool"}]},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"stateMutability":"view","type":"function","name":"allowedReceivers","outputs":[{"internalType":"bool","name":"allowed","type":"bool"}]},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"stateMutability":"view","type":"function","name":"allowedSenders","outputs":[{"internalType":"bool","name":"allowed","type":"bool"}]},{"inputs":[{"internalType":"address","name":"destination","type":"address"}],"stateMutability":"view","type":"function","name":"allowedWithdrawDestinations","outputs":[{"internalType":"bool","name":"allowed","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"callSiteCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getGovernanceAddress","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"pure","type":"function","name":"getInternalVersion","outputs":[{"internalType":"uint8","name":"","type":"uint8"}]},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"stateMutability":"view","type":"function","name":"isAllowedApprovalDestination","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"stateMutability":"view","type":"function","name":"isAllowedAsset","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes4","name":"selector","type":"bytes4"}],"stateMutability":"view","type":"function","name":"isAllowedCallSite","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"stateMutability":"view","type":"function","name":"isAllowedDelegationApprovalDestination","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"stateMutability":"view","type":"function","name":"isAllowedReceiver","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"stateMutability":"view","type":"function","name":"isAllowedSender","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"stateMutability":"view","type":"function","name":"isAllowedWithdrawDestination","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"destination","type":"address"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"removeApprovalDestination"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"removeAsset"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes4","name":"selector","type":"bytes4"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"removeCallSite"},{"inputs":[{"internalType":"address","name":"destination","type":"address"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"removeDelegationApprovalDestination"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"removeReceiver"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"removeSender"},{"inputs":[{"internalType":"address","name":"destination","type":"address"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"removeWithdrawDestination"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"renounceOwnership"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"transferOwnership"},{"inputs":[{"internalType":"bytes","name":"path","type":"bytes"}],"stateMutability":"view","type":"function","name":"validate1deltaPath"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes","name":"callDataWithSelector","type":"bytes"}],"stateMutability":"view","type":"function","name":"validateCall"},{"inputs":[{"internalType":"bytes","name":"path","type":"bytes"}],"stateMutability":"view","type":"function","name":"validateUniswapV3Path"},{"inputs":[{"internalType":"bytes","name":"callData","type":"bytes"}],"stateMutability":"view","type":"function","name":"validate_1deltaDeposit"},{"inputs":[{"internalType":"bytes","name":"callData","type":"bytes"}],"stateMutability":"view","type":"function","name":"validate_1deltaMulticall"},{"inputs":[{"internalType":"bytes","name":"callData","type":"bytes"}],"stateMutability":"view","type":"function","name":"validate_1deltaWithdraw"},{"inputs":[{"internalType":"bytes","name":"callData","type":"bytes"}],"stateMutability":"view","type":"function","name":"validate_aaveSupply"},{"inputs":[{"internalType":"bytes","name":"callData","type":"bytes"}],"stateMutability":"view","type":"function","name":"validate_aaveWithdraw"},{"inputs":[{"internalType":"bytes","name":"callData","type":"bytes"}],"stateMutability":"view","type":"function","name":"validate_approve"},{"inputs":[{"internalType":"bytes","name":"callData","type":"bytes"}],"stateMutability":"view","type":"function","name":"validate_approveDelegation"},{"inputs":[{"internalType":"bytes","name":"callData","type":"bytes"}],"stateMutability":"view","type":"function","name":"validate_exactInput"},{"inputs":[{"internalType":"bytes","name":"callData","type":"bytes"}],"stateMutability":"view","type":"function","name":"validate_exactOutput"},{"inputs":[{"internalType":"bytes","name":"callData","type":"bytes"}],"stateMutability":"view","type":"function","name":"validate_flashSwapAllOut"},{"inputs":[{"internalType":"bytes","name":"callData","type":"bytes"}],"stateMutability":"view","type":"function","name":"validate_flashSwapExactInt"},{"inputs":[{"internalType":"bytes","name":"callData","type":"bytes"}],"stateMutability":"view","type":"function","name":"validate_flashSwapExactOut"},{"inputs":[{"internalType":"bytes","name":"callData","type":"bytes"}],"stateMutability":"view","type":"function","name":"validate_swapExactTokensForTokens"},{"inputs":[{"internalType":"bytes","name":"callData","type":"bytes"}],"stateMutability":"view","type":"function","name":"validate_transfer"},{"inputs":[{"internalType":"bytes","name":"callData","type":"bytes"}],"stateMutability":"view","type":"function","name":"validate_transferERC20AllIn"},{"inputs":[{"internalType":"bytes","name":"callData","type":"bytes"}],"stateMutability":"view","type":"function","name":"validate_transferERC20In"},{"inputs":[{"internalType":"address","name":"lendingPool","type":"address"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"whitelistAaveV3"},{"inputs":[{"internalType":"address","name":"brokerProxy","type":"address"},{"internalType":"address","name":"lendingPool","type":"address"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"whitelistOnedelta"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"whitelistToken"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"whitelistTokenForDelegation"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"whitelistUniswapV2Router"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"whitelistUniswapV3Router"}],"devdoc":{"kind":"dev","methods":{"owner()":{"details":"Returns the address of the current owner."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."}},"version":1},"userdoc":{"kind":"user","methods":{"getGovernanceAddress()":{"notice":"Get the address of the proto DAO"},"getInternalVersion()":{"notice":"Track version during internal development. We bump up when new whitelistings added."},"validate1deltaPath(bytes)":{"notice":"Our implementation of 1delta path decoding and validation using similar approach as Uniswap v3 `Path.sol` Read more: - How 1delta encodes the path: https://github.com/1delta-DAO/contracts-delegation/blob/4f27e1593c564c419ff042cdd932ed52d04216bf/test-ts/1delta/shared/aggregatorPath.ts#L5-L32 - How 1delta decodes the path: https://github.com/1delta-DAO/contracts-delegation/blob/4f27e1593c564c419ff042cdd932ed52d04216bf/contracts/1delta/modules/aave/MarginTrading.sol#L54-L60"}},"version":1}},"settings":{"remappings":["@openzeppelin/=lib/openzeppelin-contracts/contracts/","ds-test/=lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin/=lib/openzeppelin-contracts/contracts/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/GuardV0.sol":"GuardV0"},"evmVersion":"paris","libraries":{}},"sources":{"lib/openzeppelin-contracts/contracts/access/Ownable.sol":{"keccak256":"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218","urls":["bzz-raw://fc980984badf3984b6303b377711220e067722bbd6a135b24669ff5069ef9f32","dweb:/ipfs/QmPHXMSXj99XjSVM21YsY6aNtLLjLVXDbyN76J5HQYvvrz"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Context.sol":{"keccak256":"0xa92e4fa126feb6907daa0513ddd816b2eb91f30a808de54f63c17d0e162c3439","urls":["bzz-raw://a367861093b74443b137564d3f3c472f70bcf114739e62059c939f25e315706c","dweb:/ipfs/Qmd7JMpcxD9RuQjK3uM3EzJUgSqdN8vzp8eytEiuwxQJ6h"],"license":"MIT"},"src/GuardV0.sol":{"keccak256":"0x26ebef3fcd081d578584bba1b83fd14e6890d9b150d1458c2e51f3781d9dfdad","urls":["bzz-raw://d28b1816517f51101c33391dcddf36320f7e6c84e37ea9e9e2a6648034a9c6f0","dweb:/ipfs/QmeRkLiNABnpUCu5XA9UKVkZ5VZV7yTnhogwwcz7v8sTwU"],"license":null},"src/IGuard.sol":{"keccak256":"0xb7b3ef010870980bd812779fd5dc8133d6dccb0e2b5d390dcfdc7a61c5064559","urls":["bzz-raw://17226392a130d807b0e1cd46f3b3fa8bf36d4f4cac6218f09d2dca75605945a3","dweb:/ipfs/QmYgn6g7B2wU6VYrhtZicWohw795yyu6qUD1riWaG2hikD"],"license":null},"src/lib/BytesLib.sol":{"keccak256":"0x7446c0f0de6eb147f0f3e40b3a72e39d02a951e8c453437dcc6b3c06007bc62a","urls":["bzz-raw://1b2b64668ea4287dfe75e1029fef387b0e3ae191b784d1bc5be01edac6d1d5c5","dweb:/ipfs/Qma3zAe3Svez1kdGc5F356m9tRjCDg8F8tAocbd5Qk13PE"],"license":"Unlicense"},"src/lib/Path.sol":{"keccak256":"0xb22c562b5175d50dbcc2224325666090d985f052abdcfe275c8dfc884e34de61","urls":["bzz-raw://27aeff27314476ab3c77313ae1f0c5b2442b86315f5ce741cb2150a87c3cbad3","dweb:/ipfs/QmQNno2g1CJvjnH6ych4LuHr1UZDEZPACgYG4XvivxGrqV"],"license":"GPL-2.0-or-later"}},"version":1},"id":3} \ No newline at end of file diff --git a/eth_defi/abi/guard/SimpleVaultV0.json b/eth_defi/abi/guard/SimpleVaultV0.json index d694ea9b..8d29ad65 100644 --- a/eth_defi/abi/guard/SimpleVaultV0.json +++ b/eth_defi/abi/guard/SimpleVaultV0.json @@ -1 +1 @@ -{"abi":[{"type":"constructor","inputs":[{"name":"_assetManager","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"assetManager","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"getWithdrawAddress","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"guard","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract GuardV0"}],"stateMutability":"view"},{"type":"function","name":"initialiseOwnership","inputs":[{"name":"_owner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"isDisabled","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"performCall","inputs":[{"name":"target","type":"address","internalType":"address"},{"name":"callData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"resetGuard","inputs":[{"name":"_guard","type":"address","internalType":"contract GuardV0"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"updateAssetManager","inputs":[{"name":"_assetManager","type":"address","internalType":"address"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"withdrawAddress","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false}],"bytecode":{"object":"0x608060405234801561001057600080fd5b5060405161357238038061357283398101604081905261002f91610177565b6100383361011a565b6040516100449061016a565b604051809103906000f080158015610060573d6000803e3d6000fd5b50600380546001600160a01b039283166001600160a01b0319918216811790925560018054938516939091168317905560408051631f458b3960e31b815260048101939093526024830152601960448301527f496e697469616c206173736574206d616e61676572207365740000000000000060648301529063fa2c59c890608401600060405180830381600087803b1580156100fc57600080fd5b505af1158015610110573d6000803e3d6000fd5b50505050506101a7565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b612b6d80610a0583390190565b60006020828403121561018957600080fd5b81516001600160a01b03811681146101a057600080fd5b9392505050565b61084f806101b66000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c80638da5cb5b116100715780638da5cb5b1461014957806394217ad11461015a578063d13573361461016d578063d2f73e3d14610180578063e8e7f80014610149578063f2fde38b1461019357600080fd5b80631581b600146100b957806337cfecf2146100e95780634a0e159d146100fe5780636c57f5a914610111578063715018a61461012e5780637ceab3b114610136575b600080fd5b6002546100cc906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6100fc6100f73660046106b9565b6101a6565b005b6100fc61010c366004610726565b61034e565b6001546040516001600160a01b03909116151581526020016100e0565b6100fc610461565b6003546100cc906001600160a01b031681565b6000546001600160a01b03166100cc565b6001546100cc906001600160a01b031681565b6100fc61017b3660046106b9565b610475565b6100fc61018e366004610726565b61049f565b6100fc6101a13660046106b9565b61057f565b6101ae6105fa565b60035460408051632d670ec960e11b81526001600160a01b0384811660048301526024820192909252601a60448201527f496e697469616c206f776e65722063616e2077697468647261770000000000006064820152911690635ace1d9290608401600060405180830381600087803b15801561022a57600080fd5b505af115801561023e573d6000803e3d6000fd5b5050600354604080516372e548a960e01b81523060048201526024810191909152602560448201527f5661756c742063616e207265636569766520746f6b656e732066726f6d206120606482015264747261646560d81b60848201526001600160a01b0390911692506372e548a9915060a401600060405180830381600087803b1580156102cb57600080fd5b505af11580156102df573d6000803e3d6000fd5b505060035460405163f2fde38b60e01b81526001600160a01b038581166004830152909116925063f2fde38b9150602401600060405180830381600087803b15801561032a57600080fd5b505af115801561033e573d6000803e3d6000fd5b5050505061034b8161057f565b50565b6103566105fa565b6001546001600160a01b0316156103d25760035460015460405163299f87d560e21b81526001600160a01b039283169263a67e1f549261039f92911690869086906004016107a4565b600060405180830381600087803b1580156103b957600080fd5b505af11580156103cd573d6000803e3d6000fd5b505050505b600180546001600160a01b0319166001600160a01b0385169081179091551561045c57600354604051631f458b3960e31b81526001600160a01b039091169063fa2c59c890610429908690869086906004016107a4565b600060405180830381600087803b15801561044357600080fd5b505af1158015610457573d6000803e3d6000fd5b505050505b505050565b6104696105fa565b6104736000610654565b565b61047d6105fa565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b600354604051636d5025f160e01b81526001600160a01b0390911690636d5025f1906104d59033908790879087906004016107d2565b60006040518083038186803b1580156104ed57600080fd5b505afa158015610501573d6000803e3d6000fd5b50505050600080846001600160a01b03168484604051610522929190610809565b6000604051808303816000865af19150503d806000811461055f576040519150601f19603f3d011682016040523d82523d6000602084013e610564565b606091505b509150915081610578578051602082018181fd5b5050505050565b6105876105fa565b6001600160a01b0381166105f15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61034b81610654565b6000546001600160a01b031633146104735760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105e8565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116811461034b57600080fd5b6000602082840312156106cb57600080fd5b81356106d6816106a4565b9392505050565b60008083601f8401126106ef57600080fd5b50813567ffffffffffffffff81111561070757600080fd5b60208301915083602082850101111561071f57600080fd5b9250929050565b60008060006040848603121561073b57600080fd5b8335610746816106a4565b9250602084013567ffffffffffffffff81111561076257600080fd5b61076e868287016106dd565b9497909650939450505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b03841681526040602082018190526000906107c9908301848661077b565b95945050505050565b6001600160a01b038581168252841660208201526060604082018190526000906107ff908301848661077b565b9695505050505050565b818382376000910190815291905056fea26469706673582212200c638cd44fefe3df26a6778f8d5f0e5ec71ec8ac7dc1e4392d5d24954c86fd5864736f6c63430008170033608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b612aef8061007e6000396000f3fe608060405234801561001057600080fd5b50600436106103785760003560e01c806386b6dbe5116101d3578063d7334c9d11610104578063f259a073116100a2578063f901dc331161007c578063f901dc3314610810578063fa2c59c814610823578063fadbcf4814610836578063fdedfa271461085957600080fd5b8063f259a0731461037d578063f26749f3146107ea578063f2fde38b146107fd57600080fd5b8063eb0de042116100de578063eb0de04214610783578063ebe2681614610770578063ee5462cc146107a6578063efb47bff146107b957600080fd5b8063d7334c9d1461075d578063e98539c514610770578063e9cd02e71461054357600080fd5b8063a67e1f5411610171578063be8c97b01161014b578063be8c97b014610706578063c537bed014610737578063ca963c5014610569578063d075f9bb1461074a57600080fd5b8063a67e1f54146106ae578063a847cf4d146106c1578063a9fc3d4f146106ef57600080fd5b8063957dc6c0116101ad578063957dc6c01461065257806398b3cc3914610665578063a1b6b43014610678578063a4c1cccb1461068b57600080fd5b806386b6dbe51461061b5780638c2fdf9e1461062e5780638da5cb5b1461064157600080fd5b806359b92be9116102ad5780636d9a14231161024b57806372e548a91161022557806372e548a9146105bd57806373252494146105d0578063761bcd9c146105f55780637ea446551461060857600080fd5b80636d9a14231461058f578063713ebf3b146105a2578063715018a6146105b557600080fd5b80635e62deee116102875780635e62deee1461054357806363cc17f2146105565780636ad11353146105695780636d5025f11461057c57600080fd5b806359b92be91461050a5780635ace1d921461051d5780635e4ccace1461053057600080fd5b80632dc32a611161031a5780633ea35551116102f45780633ea35551146104ae578063425f49d0146104c15780634b941268146104d45780634b956bd8146104f757600080fd5b80632dc32a611461044757806334ec8d7e146104785780633cf200251461048b57600080fd5b80631710a4f2116103565780631710a4f2146103dd5780631c123e77146103f05780631d49039c146104035780632d12d7881461043457600080fd5b806304a3ba251461037d57806307ac35621461039257806307ef00cf146103a5575b600080fd5b61039061038b366004612164565b610868565b005b6103906103a0366004612225565b6108d1565b6103c86103b33660046122a4565b60066020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6103906103eb366004612225565b610bf6565b6103906103fe366004612225565b610c56565b6103c86104113660046122a4565b6001600160a01b031660009081526007602052604090205460ff16151560011490565b610390610442366004612164565b610cd0565b6103c86104553660046122a4565b6001600160a01b031660009081526008602052604090205460ff16151560011490565b610390610486366004612164565b610d2c565b6103c86104993660046122a4565b60056020526000908152604090205460ff1681565b6103906104bc366004612164565b610d94565b6103906104cf366004612225565b610dbf565b6103c86104e23660046122a4565b60086020526000908152604090205460ff1681565b610390610505366004612225565b610de1565b610390610518366004612225565b610e6d565b61039061052b366004612164565b610eab565b61039061053e3660046122e5565b610f0a565b610390610551366004612225565b610fa0565b610390610564366004612164565b611005565b610390610577366004612225565b611064565b61039061058a366004612347565b611087565b61039061059d366004612164565b61149f565b6103c86105b0366004612378565b6114d5565b61039061150d565b6103906105cb366004612164565b611521565b6000546001600160a01b03165b6040516001600160a01b0390911681526020016103d4565b610390610603366004612225565b611580565b610390610616366004612225565b611620565b610390610629366004612164565b611641565b61039061063c366004612164565b6116a0565b6000546001600160a01b03166105dd565b610390610660366004612225565b6116fc565b610390610673366004612164565b61179a565b610390610686366004612225565b6117f9565b6103c86106993660046122a4565b60036020526000908152604090205460ff1681565b6103906106bc366004612164565b611941565b6103c86106cf366004612378565b600160209081526000928352604080842090915290825290205460ff1681565b6106f860025481565b6040519081526020016103d4565b6103c86107143660046122a4565b6001600160a01b031660009081526004602052604090205460ff16151560011490565b6103c86107453660046122a4565b61199d565b6103c86107583660046122a4565b6119c0565b61039061076b3660046122e5565b6119e3565b61039061077e366004612225565b611a56565b6103c86107913660046122a4565b60076020526000908152604090205460ff1681565b6103906107b4366004612164565b611aa2565b6103c86107c73660046122a4565b6001600160a01b031660009081526006602052604090205460ff16151560011490565b6103906107f8366004612347565b611b57565b61039061080b3660046122a4565b611bcc565b61039061081e366004612164565b611c45565b610390610831366004612164565b611ca1565b6103c86108443660046122a4565b60046020526000908152604090205460ff1681565b604051600181526020016103d4565b610870611d00565b6001600160a01b03831660009081526007602052604090819020805460ff19169055517fb71be9befd3ac90c1c9981d3b1161b3c2c6dcd741f13b34061aa251226a802df906108c4908590859085906123d6565b60405180910390a1505050565b6000818060200190518101906108e79190612490565b905060005b8151811015610bf157600082828151811061090957610909612540565b60200260200101519050600061092c6000600484611d5a9092919063ffffffff16565b61093590612556565b90506000610953600480855161094b91906125a3565b859190611d5a565b6040805180820190915260208082527f7472616e736665724552433230496e28616464726573732c75696e74323536299101529050631dac092b60e11b6001600160e01b03198316016109ae576109a981610e6d565b610be6565b60408051808201909152601b81527f7472616e736665724552433230416c6c496e2861646472657373290000000000602090910152635cf59cb760e11b6001600160e01b0319831601610a04576109a981611620565b60408051808201909152601881527f6465706f73697428616464726573732c6164647265737329000000000000000060209091015262d3ec1f60e31b6001600160e01b0319831601610a59576109a981610fa0565b60408051808201909152601981527f776974686472617728616464726573732c6164647265737329000000000000006020909101526306bf1c7b60e01b6001600160e01b0319831601610aaf576109a981610fa0565b610ad6604051806060016040528060278152602001612a5f60279139805160209091012090565b6001600160e01b031916826001600160e01b03191603610af9576109a981611064565b610b20604051806060016040528060288152602001612a3760289139805160209091012090565b6001600160e01b031916826001600160e01b03191603610b43576109a981611064565b60408051808201909152601e81527f666c61736853776170416c6c4f75742875696e743235362c627974657329000060209091015263d2b3d16560e01b6001600160e01b0319831601610b99576109a981610dbf565b60405162461bcd60e51b815260206004820152601960248201527f556e6b6e6f776e2066756e6374696f6e2073656c6563746f720000000000000060448201526064015b60405180910390fd5b5050506001016108ec565b505050565b600081806020019051810190610c0c91906125c1565b509050610c36816001600160a01b031660009081526006602052604090205460ff16151560011490565b610c525760405162461bcd60e51b8152600401610bdd906125ef565b5050565b6000805b610c6383611eb1565b5092509050610c718261199d565b610c8d5760405162461bcd60e51b8152600401610bdd90612626565b610c968161199d565b610cb25760405162461bcd60e51b8152600401610bdd90612626565b610cbb83611eed565b15610bf157610cc983611f27565b9250610c5a565b610cd8611d00565b6001600160a01b03831660009081526005602052604090819020805460ff19169055517f4e13b11ab98e672bd78295ef9cebe764dc617f95decf47d842c25b83abc0c724906108c4908590859085906123d6565b610d5e83610d57604051806060016040528060338152602001612a0460339139805160209091012090565b8484610f0a565b610d8983610d57604051806060016040528060348152602001612a8660349139805160209091012090565b610bf183838361179a565b610d8983610d5760405180608001604052806043815260200161299f60439139805160209091012090565b600081806020019051810190610dd59190612651565b915050610c52816117f9565b600081806020019051810190610df791906125c1565b509050610e21816001600160a01b031660009081526007602052604090205460ff16151560011490565b610c525760405162461bcd60e51b815260206004820152601e60248201527f417070726f7665206164647265737320646f6573206e6f74206d6174636800006044820152606401610bdd565b600081806020019051810190610e8391906125c1565b509050610e8f8161199d565b610c525760405162461bcd60e51b8152600401610bdd90612626565b610eb3611d00565b6001600160a01b03831660009081526006602052604090819020805460ff19166001179055517f3562181221a42a19ddd03a82dfe06acab1905ceb65cdaf7d86a1d9fec6643552906108c4908590859085906123d6565b610f12611d00565b6001600160a01b03841660009081526001602081815260408084206001600160e01b0319881685529091528220805460ff191690911790556002805491610f5883612697565b91905055507fef729aaa41b9fd994f9ff7c1960df214a84f722002e6cfbea31799cd0873a3ef84848484604051610f9294939291906126b0565b60405180910390a150505050565b60008082806020019051810190610fb791906126ef565b91509150610fc48261199d565b610fe05760405162461bcd60e51b8152600401610bdd90612626565b610fe9816119c0565b610bf15760405162461bcd60e51b8152600401610bdd906125ef565b61100d611d00565b6001600160a01b03831660009081526008602052604090819020805460ff19166001179055517f628a44970c0e450415e3ae74334ea44f3307b74dbf677a1371190242bf2f3589906108c4908590859085906123d6565b60008180602001905181019061107a9190612729565b92505050610c52816117f9565b6000546001600160a01b03858116911614611499576110c3846001600160a01b031660009081526004602052604090205460ff16151560011490565b6111045760405162461bcd60e51b815260206004820152601260248201527114d95b99195c881b9bdd08185b1b1bddd95960721b6044820152606401610bdd565b60006111136004828486612778565b61111c916127a2565b905036600061112e8460048188612778565b9150915061113c86846114d5565b6111805760405162461bcd60e51b815260206004820152601560248201527410d85b1b081cda5d19481b9bdd08185b1b1bddd959605a1b6044820152606401610bdd565b6111a760405180608001604052806043815260200161299f60439139805160209091012090565b6001600160e01b031916836001600160e01b031916036112055761120082828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061158092505050565b611495565b61122c604051806060016040528060338152602001612a0460339139805160209091012090565b6001600160e01b031916836001600160e01b031916036112855761120082828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a5692505050565b6040805180820190915260128152716d756c746963616c6c2862797465735b5d2960701b602090910152630a6d35e560e31b6001600160e01b03198416016113065761120082828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506108d192505050565b6040805180820190915260198152787472616e7366657228616464726573732c75696e743235362960381b6020909101526356fa634560e01b6001600160e01b031984160161138e5761120082828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610bf692505050565b604080518082019091526018815277617070726f766528616464726573732c75696e743235362960401b60209091015263f6a1584d60e01b6001600160e01b03198416016114155761120082828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610de192505050565b61143c6040518060600160405280602281526020016129e260229139805160209091012090565b6001600160e01b031916836001600160e01b03191603610b995761120082828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506116fc92505050565b5050505b50505050565b6114ca83610d576040518060600160405280602281526020016129e260229139805160209091012090565b610bf1838383611641565b6001600160a01b03821660009081526001602090815260408083206001600160e01b03198516845290915290205460ff165b92915050565b611515611d00565b61151f6000611f58565b565b611529611d00565b6001600160a01b03831660009081526005602052604090819020805460ff19166001179055517f62dd88c5ecfa60713a657640ebec4de26fc1aefa4afdb24e6d15a124fce72779906108c4908590859085906123d6565b6000808280602001905181019061159791906127d2565b509350935050506115a7816119c0565b6115c35760405162461bcd60e51b8152600401610bdd906125ef565b6000805b8351811015611619578381815181106115e2576115e2612540565b602002602001015191506115f58261199d565b6116115760405162461bcd60e51b8152600401610bdd90612626565b6001016115c7565b5050505050565b600081806020019051810190611636919061289b565b9050610e8f8161199d565b611649611d00565b6001600160a01b03831660009081526003602052604090819020805460ff19166001179055517fad90e2570fc4fe9f7437be3188d5c791c6662892d31731992aa88f5c87621983906108c4908590859085906123d6565b6116a8611d00565b6001600160a01b03831660009081526006602052604090819020805460ff19169055517f1212f8ddb39de8e1a339460c95752d61100723efeaa34ccd94bca94393f40938906108c4908590859085906123d6565b60008180602001905181019061171291906125c1565b50905061173c816001600160a01b031660009081526008602052604090205460ff16151560011490565b610c525760405162461bcd60e51b815260206004820152602960248201527f417070726f76652064656c65676174696f6e206164647265737320646f6573206044820152680dcdee840dac2e8c6d60bb1b6064820152608401610bdd565b6117a2611d00565b6001600160a01b03831660009081526007602052604090819020805460ff19166001179055517f628a44970c0e450415e3ae74334ea44f3307b74dbf677a1371190242bf2f3589906108c4908590859085906123d6565b6000805b611808836000611fa8565b915061183760018061181c600360146128b8565b61182691906128b8565b61183091906128b8565b8490611fa8565b90506118428261199d565b61185e5760405162461bcd60e51b8152600401610bdd90612626565b6118678161199d565b6118835760405162461bcd60e51b8152600401610bdd90612626565b600180611892600360146128b8565b61189c91906128b8565b6118a691906128b8565b60146001806118b66003846128b8565b6118c091906128b8565b6118ca91906128b8565b6118d491906128b8565b6118de91906128b8565b835110610bf15761193a6001806118f7600360146128b8565b61190191906128b8565b61190b91906128b8565b60018061191a600360146128b8565b61192491906128b8565b61192e91906128b8565b855161094b91906125a3565b92506117fd565b611949611d00565b6001600160a01b03831660009081526004602052604090819020805460ff19169055517f3097928509c53a2dab9500431201d82b0d756e8f890fd01f4ae6b33b45687ea4906108c4908590859085906123d6565b6001600160a01b031660009081526003602052604090205460ff16151560011490565b6001600160a01b031660009081526005602052604090205460ff16151560011490565b6119eb611d00565b6001600160a01b03841660009081526001602090815260408083206001600160e01b03198716845290915290819020805460ff19169055517f37ea10f2d08f5a9803dfcd5abf3cfc7b0d6fcdf5fcbc36be9ea5a0b53d9a4d9b90610f929086908690869086906126b0565b600081806020019051810190611a6c9190612962565b9050611a7b81602001516119c0565b611a975760405162461bcd60e51b8152600401610bdd906125ef565b8051610c5290610c56565b6040805180820190915260198152787472616e7366657228616464726573732c75696e743235362960381b602090910152611afd837fa9059cbb2ab09eb219583f4a59a5d0623ade346d962bcd4e46b11da047c9049b610d57565b604080518082019091526018815277617070726f766528616464726573732c75696e743235362960401b6020909101526114ca837f095ea7b334ae44009aa867bfb386f5c3b4b443ac6f0ee573fa91c4608fbadfba610d57565b6040805180820190915260128152716d756c746963616c6c2862797465735b5d2960701b602090910152611bab847fac9650d882acfa253cba1ed543b9ff47351da99c3bd00a89625e5cdb2099009c610d57565b611bb684838361179a565b611bc183838361179a565b611499848383611005565b611bd4611d00565b6001600160a01b038116611c395760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bdd565b611c4281611f58565b50565b611c4d611d00565b6001600160a01b03831660009081526003602052604090819020805460ff19169055517f9ca3f065622f5f03f32b7157677a0e420c3a36ab45fd49f256ffebce3e310587906108c4908590859085906123d6565b611ca9611d00565b6001600160a01b03831660009081526004602052604090819020805460ff19166001179055517fa8f9caaf4861720900294428e4ff34d37070c37afd26d96e6e4da75326d2c3ad906108c4908590859085906123d6565b6000546001600160a01b0316331461151f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610bdd565b606081611d6881601f6128b8565b1015611da75760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b6044820152606401610bdd565b82611db283826128b8565b1015611df15760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b6044820152606401610bdd565b611dfb82846128b8565b84511015611e3f5760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b6044820152606401610bdd565b606082158015611e5e5760405191506000825260208201604052611ea8565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015611e97578051835260209283019201611e7f565b5050858452601f01601f1916604052505b50949350505050565b60008080611ebf8482611fa8565b9250611ecc84601461205c565b9050611ee4611edd600360146128b8565b8590611fa8565b91509193909250565b6000611efb600360146128b8565b6014611f086003826128b8565b611f1291906128b8565b611f1c91906128b8565b825110159050919050565b6060611507611f38600360146128b8565b611f44600360146128b8565b8451611f5091906125a3565b849190611d5a565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600081611fb68160146128b8565b1015611ff95760405162461bcd60e51b8152602060048201526012602482015271746f416464726573735f6f766572666c6f7760701b6044820152606401610bdd565b6120048260146128b8565b8351101561204c5760405162461bcd60e51b8152602060048201526015602482015274746f416464726573735f6f75744f66426f756e647360581b6044820152606401610bdd565b500160200151600160601b900490565b60008161206a8160036128b8565b10156120ac5760405162461bcd60e51b8152602060048201526011602482015270746f55696e7432345f6f766572666c6f7760781b6044820152606401610bdd565b6120b78260036128b8565b835110156120fe5760405162461bcd60e51b8152602060048201526014602482015273746f55696e7432345f6f75744f66426f756e647360601b6044820152606401610bdd565b50016003015190565b6001600160a01b0381168114611c4257600080fd5b60008083601f84011261212e57600080fd5b5081356001600160401b0381111561214557600080fd5b60208301915083602082850101111561215d57600080fd5b9250929050565b60008060006040848603121561217957600080fd5b833561218481612107565b925060208401356001600160401b0381111561219f57600080fd5b6121ab8682870161211c565b9497909650939450505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156121f6576121f66121b8565b604052919050565b60006001600160401b03821115612217576122176121b8565b50601f01601f191660200190565b60006020828403121561223757600080fd5b81356001600160401b0381111561224d57600080fd5b8201601f8101841361225e57600080fd5b803561227161226c826121fe565b6121ce565b81815285602083850101111561228657600080fd5b81602084016020830137600091810160200191909152949350505050565b6000602082840312156122b657600080fd5b81356122c181612107565b9392505050565b80356001600160e01b0319811681146122e057600080fd5b919050565b600080600080606085870312156122fb57600080fd5b843561230681612107565b9350612314602086016122c8565b925060408501356001600160401b0381111561232f57600080fd5b61233b8782880161211c565b95989497509550505050565b6000806000806060858703121561235d57600080fd5b843561236881612107565b9350602085013561231481612107565b6000806040838503121561238b57600080fd5b823561239681612107565b91506123a4602084016122c8565b90509250929050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b03841681526040602082018190526000906123fb90830184866123ad565b95945050505050565b60006001600160401b0382111561241d5761241d6121b8565b5060051b60200190565b600082601f83011261243857600080fd5b815161244661226c826121fe565b818152602085602084870101111561245d57600080fd5b60005b8381101561247b578581018201518382018301528101612460565b50506000918101602001919091529392505050565b600060208083850312156124a357600080fd5b82516001600160401b03808211156124ba57600080fd5b818501915085601f8301126124ce57600080fd5b81516124dc61226c82612404565b81815260059190911b830184019084810190888311156124fb57600080fd5b8585015b83811015612533578051858111156125175760008081fd5b6125258b89838a0101612427565b8452509186019186016124ff565b5098975050505050505050565b634e487b7160e01b600052603260045260246000fd5b805160208201516001600160e01b031980821692919060048310156125855780818460040360031b1b83161693505b505050919050565b634e487b7160e01b600052601160045260246000fd5b818103818111156115075761150761258d565b80516122e081612107565b600080604083850312156125d457600080fd5b82516125df81612107565b6020939093015192949293505050565b6020808252601f908201527f5265636569766572206164647265737320646f6573206e6f74206d6174636800604082015260600190565b602080825260119082015270151bdad95b881b9bdd08185b1b1bddd959607a1b604082015260600190565b6000806040838503121561266457600080fd5b8251915060208301516001600160401b0381111561268157600080fd5b61268d85828601612427565b9150509250929050565b6000600182016126a9576126a961258d565b5060010190565b6001600160a01b03851681526001600160e01b0319841660208201526060604082018190526000906126e590830184866123ad565b9695505050505050565b6000806040838503121561270257600080fd5b825161270d81612107565b602084015190925061271e81612107565b809150509250929050565b60008060006060848603121561273e57600080fd5b835192506020840151915060408401516001600160401b0381111561276257600080fd5b61276e86828701612427565b9150509250925092565b6000808585111561278857600080fd5b8386111561279557600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156127ca5780818660040360031b1b83161692505b505092915050565b600080600080600060a086880312156127ea57600080fd5b85519450602080870151945060408701516001600160401b0381111561280f57600080fd5b8701601f8101891361282057600080fd5b805161282e61226c82612404565b81815260059190911b8201830190838101908b83111561284d57600080fd5b928401925b8284101561287457835161286581612107565b82529284019290840190612852565b8097505050505050612888606087016125b6565b9150608086015190509295509295909350565b6000602082840312156128ad57600080fd5b81516122c181612107565b808201808211156115075761150761258d565b600060a082840312156128dd57600080fd5b60405160a081016001600160401b038282108183111715612900576129006121b8565b81604052829350845191508082111561291857600080fd5b5061292585828601612427565b825250602083015161293681612107565b806020830152506040830151604082015260608301516060820152608083015160808201525092915050565b60006020828403121561297457600080fd5b81516001600160401b0381111561298a57600080fd5b612996848285016128cb565b94935050505056fe737761704578616374546f6b656e73466f72546f6b656e732875696e743235362c75696e743235362c616464726573735b5d2c616464726573732c75696e7432353629617070726f766544656c65676174696f6e28616464726573732c75696e74323536296578616374496e707574282862797465732c616464726573732c75696e743235362c75696e743235362c75696e743235362929666c6173685377617045786163744f75742875696e743235362c75696e743235362c627974657329666c617368537761704578616374496e2875696e743235362c75696e743235362c62797465732965786163744f7574707574282862797465732c616464726573732c75696e743235362c75696e743235362c75696e743235362929a264697066735822122071b77001ac4875888d25f967243da90848e0ed9ab6629eef3239476f5148045064736f6c63430008170033","sourceMap":"472:2570:5:-:0;;;611:235;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;936:32:0;734:10:2;936:18:0;:32::i;:::-;674:13:5::1;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;666:5:5::1;:21:::0;;-1:-1:-1;;;;;666:21:5;;::::1;-1:-1:-1::0;;;;;;666:21:5;;::::1;::::0;::::1;::::0;;;-1:-1:-1;739:28:5;;;;::::1;::::0;;;::::1;::::0;::::1;::::0;;777:61:::1;::::0;;-1:-1:-1;;;777:61:5;;::::1;::::0;::::1;521:51:8::0;;;;588:18;;;581:30;647:2;627:18;;;620:30;686:27;666:18;;;659:55;666:21:5;777:17:::1;::::0;731:19:8;;777:61:5::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;611:235:::0;472:2570;;2426:187:0;2499:16;2518:6;;-1:-1:-1;;;;;2534:17:0;;;-1:-1:-1;;;;;;2534:17:0;;;;;;2566:40;;2518:6;;;;;;;2566:40;;2499:16;2566:40;2489:124;2426:187;:::o;472:2570:5:-;;;;;;;;:::o;14:290:8:-;84:6;137:2;125:9;116:7;112:23;108:32;105:52;;;153:1;150;143:12;105:52;179:16;;-1:-1:-1;;;;;224:31:8;;214:42;;204:70;;270:1;267;260:12;204:70;293:5;14:290;-1:-1:-1;;;14:290:8:o;309:447::-;472:2570:5;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405234801561001057600080fd5b50600436106100b45760003560e01c80638da5cb5b116100715780638da5cb5b1461014957806394217ad11461015a578063d13573361461016d578063d2f73e3d14610180578063e8e7f80014610149578063f2fde38b1461019357600080fd5b80631581b600146100b957806337cfecf2146100e95780634a0e159d146100fe5780636c57f5a914610111578063715018a61461012e5780637ceab3b114610136575b600080fd5b6002546100cc906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6100fc6100f73660046106b9565b6101a6565b005b6100fc61010c366004610726565b61034e565b6001546040516001600160a01b03909116151581526020016100e0565b6100fc610461565b6003546100cc906001600160a01b031681565b6000546001600160a01b03166100cc565b6001546100cc906001600160a01b031681565b6100fc61017b3660046106b9565b610475565b6100fc61018e366004610726565b61049f565b6100fc6101a13660046106b9565b61057f565b6101ae6105fa565b60035460408051632d670ec960e11b81526001600160a01b0384811660048301526024820192909252601a60448201527f496e697469616c206f776e65722063616e2077697468647261770000000000006064820152911690635ace1d9290608401600060405180830381600087803b15801561022a57600080fd5b505af115801561023e573d6000803e3d6000fd5b5050600354604080516372e548a960e01b81523060048201526024810191909152602560448201527f5661756c742063616e207265636569766520746f6b656e732066726f6d206120606482015264747261646560d81b60848201526001600160a01b0390911692506372e548a9915060a401600060405180830381600087803b1580156102cb57600080fd5b505af11580156102df573d6000803e3d6000fd5b505060035460405163f2fde38b60e01b81526001600160a01b038581166004830152909116925063f2fde38b9150602401600060405180830381600087803b15801561032a57600080fd5b505af115801561033e573d6000803e3d6000fd5b5050505061034b8161057f565b50565b6103566105fa565b6001546001600160a01b0316156103d25760035460015460405163299f87d560e21b81526001600160a01b039283169263a67e1f549261039f92911690869086906004016107a4565b600060405180830381600087803b1580156103b957600080fd5b505af11580156103cd573d6000803e3d6000fd5b505050505b600180546001600160a01b0319166001600160a01b0385169081179091551561045c57600354604051631f458b3960e31b81526001600160a01b039091169063fa2c59c890610429908690869086906004016107a4565b600060405180830381600087803b15801561044357600080fd5b505af1158015610457573d6000803e3d6000fd5b505050505b505050565b6104696105fa565b6104736000610654565b565b61047d6105fa565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b600354604051636d5025f160e01b81526001600160a01b0390911690636d5025f1906104d59033908790879087906004016107d2565b60006040518083038186803b1580156104ed57600080fd5b505afa158015610501573d6000803e3d6000fd5b50505050600080846001600160a01b03168484604051610522929190610809565b6000604051808303816000865af19150503d806000811461055f576040519150601f19603f3d011682016040523d82523d6000602084013e610564565b606091505b509150915081610578578051602082018181fd5b5050505050565b6105876105fa565b6001600160a01b0381166105f15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61034b81610654565b6000546001600160a01b031633146104735760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105e8565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116811461034b57600080fd5b6000602082840312156106cb57600080fd5b81356106d6816106a4565b9392505050565b60008083601f8401126106ef57600080fd5b50813567ffffffffffffffff81111561070757600080fd5b60208301915083602082850101111561071f57600080fd5b9250929050565b60008060006040848603121561073b57600080fd5b8335610746816106a4565b9250602084013567ffffffffffffffff81111561076257600080fd5b61076e868287016106dd565b9497909650939450505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b03841681526040602082018190526000906107c9908301848661077b565b95945050505050565b6001600160a01b038581168252841660208201526060604082018190526000906107ff908301848661077b565b9695505050505050565b818382376000910190815291905056fea26469706673582212200c638cd44fefe3df26a6778f8d5f0e5ec71ec8ac7dc1e4392d5d24954c86fd5864736f6c63430008170033","sourceMap":"472:2570:5:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;547:30;;;;;-1:-1:-1;;;;;547:30:5;;;;;;-1:-1:-1;;;;;178:32:8;;;160:51;;148:2;133:18;547:30:5;;;;;;;;932:479;;;;;;:::i;:::-;;:::i;:::-;;2103:344;;;;;;:::i;:::-;;:::i;1882:99::-;1948:12;;1882:99;;-1:-1:-1;;;;;1948:12:5;;;:26;;1654:41:8;;1642:2;1627:18;1882:99:5;1514:187:8;1824:101:0;;;:::i;584:20:5:-;;;;;-1:-1:-1;;;;;584:20:5;;;1201:85:0;1247:7;1273:6;-1:-1:-1;;;;;1273:6:0;1201:85;;513:27:5;;;;;-1:-1:-1;;;;;513:27:5;;;1417:86;;;;;;:::i;:::-;;:::i;2453:586::-;;;;;;:::i;:::-;;:::i;2074:198:0:-;;;;;;:::i;:::-;;:::i;932:479:5:-;1094:13:0;:11;:13::i;:::-;1105:5:5::1;::::0;:68:::1;::::0;;-1:-1:-1;;;1105:68:5;;-1:-1:-1;;;;;2978:32:8;;;1105:68:5::1;::::0;::::1;2960:51:8::0;3027:18;;;3020:30;;;;3086:2;3066:18;;;3059:30;3125:28;3105:18;;;3098:56;1105:5:5;::::1;::::0;:30:::1;::::0;3171:19:8;;1105:68:5::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;1183:5:5::1;::::0;:75:::1;::::0;;-1:-1:-1;;;1183:75:5;;1211:4:::1;1183:75;::::0;::::1;3413:51:8::0;3480:18;;;3473:30;;;;3539:2;3519:18;;;3512:30;3578:34;3558:18;;;3551:62;-1:-1:-1;;;3629:19:8;;;3622:36;-1:-1:-1;;;;;1183:5:5;;::::1;::::0;-1:-1:-1;1183:19:5::1;::::0;-1:-1:-1;3675:19:8;;1183:75:5::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;1268:5:5::1;::::0;:31:::1;::::0;-1:-1:-1;;;1268:31:5;;-1:-1:-1;;;;;178:32:8;;;1268:31:5::1;::::0;::::1;160:51:8::0;1268:5:5;;::::1;::::0;-1:-1:-1;1268:23:5::1;::::0;-1:-1:-1;133:18:8;;1268:31:5::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;1379:25;1397:6;1379:17;:25::i;:::-;932:479:::0;:::o;2103:344::-;1094:13:0;:11;:13::i;:::-;2207:12:5::1;::::0;-1:-1:-1;;;;;2207:12:5::1;:26:::0;2204:95:::1;;2249:5;::::0;;2268:12;2249:39:::1;::::0;-1:-1:-1;;;2249:39:5;;-1:-1:-1;;;;;2249:5:5;;::::1;::::0;:18:::1;::::0;:39:::1;::::0;2268:12;::::1;::::0;2282:5;;;;2249:39:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;2204:95;2308:12;:28:::0;;-1:-1:-1;;;;;;2308:28:5::1;-1:-1:-1::0;;;;;2308:28:5;::::1;::::0;;::::1;::::0;;;2349:26;2346:95:::1;;2391:5;::::0;:39:::1;::::0;-1:-1:-1;;;2391:39:5;;-1:-1:-1;;;;;2391:5:5;;::::1;::::0;:17:::1;::::0;:39:::1;::::0;2409:13;;2424:5;;;;2391:39:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;2346:95;2103:344:::0;;;:::o;1824:101:0:-;1094:13;:11;:13::i;:::-;1888:30:::1;1915:1;1888:18;:30::i;:::-;1824:101::o:0;1417:86:5:-;1094:13:0;:11;:13::i;:::-;1482:5:5::1;:14:::0;;-1:-1:-1;;;;;;1482:14:5::1;-1:-1:-1::0;;;;;1482:14:5;;;::::1;::::0;;;::::1;::::0;;1417:86::o;2453:586::-;2601:5;;:48;;-1:-1:-1;;;2601:48:5;;-1:-1:-1;;;;;2601:5:5;;;;:18;;:48;;2620:10;;2632:6;;2640:8;;;;2601:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2719:12;2733:23;2760:6;-1:-1:-1;;;;;2760:11:5;2772:8;;2760:21;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2718:63;;;;2796:7;2792:241;;2877:10;2871:17;2944:4;2932:10;2928:21;2990:18;2973:15;2966:43;2792:241;2524:515;;2453:586;;;:::o;2074:198:0:-;1094:13;:11;:13::i;:::-;-1:-1:-1;;;;;2162:22:0;::::1;2154:73;;;::::0;-1:-1:-1;;;2154:73:0;;5252:2:8;2154:73:0::1;::::0;::::1;5234:21:8::0;5291:2;5271:18;;;5264:30;5330:34;5310:18;;;5303:62;-1:-1:-1;;;5381:18:8;;;5374:36;5427:19;;2154:73:0::1;;;;;;;;;2237:28;2256:8;2237:18;:28::i;1359:130::-:0;1247:7;1273:6;-1:-1:-1;;;;;1273:6:0;734:10:2;1422:23:0;1414:68;;;;-1:-1:-1;;;1414:68:0;;5659:2:8;1414:68:0;;;5641:21:8;;;5678:18;;;5671:30;5737:34;5717:18;;;5710:62;5789:18;;1414:68:0;5457:356:8;2426:187:0;2499:16;2518:6;;-1:-1:-1;;;;;2534:17:0;;;-1:-1:-1;;;;;;2534:17:0;;;;;;2566:40;;2518:6;;;;;;;2566:40;;2499:16;2566:40;2489:124;2426:187;:::o;222:131:8:-;-1:-1:-1;;;;;297:31:8;;287:42;;277:70;;343:1;340;333:12;358:247;417:6;470:2;458:9;449:7;445:23;441:32;438:52;;;486:1;483;476:12;438:52;525:9;512:23;544:31;569:5;544:31;:::i;:::-;594:5;358:247;-1:-1:-1;;;358:247:8:o;610:348::-;662:8;672:6;726:3;719:4;711:6;707:17;703:27;693:55;;744:1;741;734:12;693:55;-1:-1:-1;767:20:8;;810:18;799:30;;796:50;;;842:1;839;832:12;796:50;879:4;871:6;867:17;855:29;;931:3;924:4;915:6;907;903:19;899:30;896:39;893:59;;;948:1;945;938:12;893:59;610:348;;;;;:::o;963:546::-;1043:6;1051;1059;1112:2;1100:9;1091:7;1087:23;1083:32;1080:52;;;1128:1;1125;1118:12;1080:52;1167:9;1154:23;1186:31;1211:5;1186:31;:::i;:::-;1236:5;-1:-1:-1;1292:2:8;1277:18;;1264:32;1319:18;1308:30;;1305:50;;;1351:1;1348;1341:12;1305:50;1390:59;1441:7;1432:6;1421:9;1417:22;1390:59;:::i;:::-;963:546;;1468:8;;-1:-1:-1;1364:85:8;;-1:-1:-1;;;;963:546:8:o;3705:267::-;3794:6;3789:3;3782:19;3846:6;3839:5;3832:4;3827:3;3823:14;3810:43;-1:-1:-1;3898:1:8;3873:16;;;3891:4;3869:27;;;3862:38;;;;3954:2;3933:15;;;-1:-1:-1;;3929:29:8;3920:39;;;3916:50;;3705:267::o;3977:344::-;-1:-1:-1;;;;;4164:32:8;;4146:51;;4233:2;4228;4213:18;;4206:30;;;-1:-1:-1;;4253:62:8;;4296:18;;4288:6;4280;4253:62;:::i;:::-;4245:70;3977:344;-1:-1:-1;;;;;3977:344:8:o;4326:443::-;-1:-1:-1;;;;;4577:15:8;;;4559:34;;4629:15;;4624:2;4609:18;;4602:43;4681:2;4676;4661:18;;4654:30;;;4502:4;;4701:62;;4744:18;;4736:6;4728;4701:62;:::i;:::-;4693:70;4326:443;-1:-1:-1;;;;;;4326:443:8:o;4774:271::-;4957:6;4949;4944:3;4931:33;4913:3;4983:16;;5008:13;;;4983:16;4774:271;-1:-1:-1;4774:271:8:o","linkReferences":{}},"methodIdentifiers":{"assetManager()":"94217ad1","getWithdrawAddress()":"e8e7f800","guard()":"7ceab3b1","initialiseOwnership(address)":"37cfecf2","isDisabled()":"6c57f5a9","owner()":"8da5cb5b","performCall(address,bytes)":"d2f73e3d","renounceOwnership()":"715018a6","resetGuard(address)":"d1357336","transferOwnership(address)":"f2fde38b","updateAssetManager(address,string)":"4a0e159d","withdrawAddress()":"1581b600"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_assetManager\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"assetManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getWithdrawAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"guard\",\"outputs\":[{\"internalType\":\"contract GuardV0\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"initialiseOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isDisabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"name\":\"performCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract GuardV0\",\"name\":\"_guard\",\"type\":\"address\"}],\"name\":\"resetGuard\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_assetManager\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"updateAssetManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdrawAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getWithdrawAddress()\":{\"notice\":\"Allow single withdrawal destination. Preferably multisig/DAO treasury address.\"},\"initialiseOwnership(address)\":{\"notice\":\"Initialise vault and guard for a withdrawal destination.\"},\"isDisabled()\":{\"notice\":\"Asset manager can no longer trade on this vault. Emergency pause set by the governance. Disable with updateAssetManager().\"},\"updateAssetManager(address,string)\":{\"notice\":\"Change the asset manager. Set to zero address to disable asset manager.\"}},\"notice\":\"Simple vault allowing delegating of a trading activites to a hot wallet. - Self-contained - Guard is used to check asset manager can only perform approved operations. - No shares, single owner - No accounting - No slippage protection (unlike Enzyme)\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/SimpleVaultV0.sol\":\"SimpleVaultV0\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/=lib/openzeppelin-contracts/contracts/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin/=lib/openzeppelin-contracts/contracts/\"]},\"sources\":{\"lib/openzeppelin-contracts/contracts/access/Ownable.sol\":{\"keccak256\":\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fc980984badf3984b6303b377711220e067722bbd6a135b24669ff5069ef9f32\",\"dweb:/ipfs/QmPHXMSXj99XjSVM21YsY6aNtLLjLVXDbyN76J5HQYvvrz\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bd39944e8fc06be6dbe2dd1d8449b5336e23c6a7ba3e8e9ae5ae0f37f35283f5\",\"dweb:/ipfs/QmPV3FGYjVwvKSgAXKUN3r9T9GwniZz83CxBpM7vyj2G53\"]},\"lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"keccak256\":\"0xa92e4fa126feb6907daa0513ddd816b2eb91f30a808de54f63c17d0e162c3439\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a367861093b74443b137564d3f3c472f70bcf114739e62059c939f25e315706c\",\"dweb:/ipfs/Qmd7JMpcxD9RuQjK3uM3EzJUgSqdN8vzp8eytEiuwxQJ6h\"]},\"src/GuardV0.sol\":{\"keccak256\":\"0x9a9aab013b396c3716f8bb91f21c213c04297f6caa6ad15c34532dafa240b9ab\",\"urls\":[\"bzz-raw://75e862d1fc197f8a6b3016971b610558906b657335d7f238c7c9d31f8f46252b\",\"dweb:/ipfs/QmTEXH8E9B7zkxnG4XoFaQav36wG2p93wjAap8x36sEtTq\"]},\"src/IGuard.sol\":{\"keccak256\":\"0xb7b3ef010870980bd812779fd5dc8133d6dccb0e2b5d390dcfdc7a61c5064559\",\"urls\":[\"bzz-raw://17226392a130d807b0e1cd46f3b3fa8bf36d4f4cac6218f09d2dca75605945a3\",\"dweb:/ipfs/QmYgn6g7B2wU6VYrhtZicWohw795yyu6qUD1riWaG2hikD\"]},\"src/SimpleVaultV0.sol\":{\"keccak256\":\"0x28de4090f998d49a9e829c2bbf4d18f68774c2e0df71d9347f7d28a633fa8358\",\"urls\":[\"bzz-raw://f859db4a725bc09d1556103b93ae48c166b74482d7c5417a22a6e3088125f1e4\",\"dweb:/ipfs/QmcyuWDou6L57FVsid9dbfqq3uDqo3iYrDyiEAiTpo1EBM\"]},\"src/lib/BytesLib.sol\":{\"keccak256\":\"0x7446c0f0de6eb147f0f3e40b3a72e39d02a951e8c453437dcc6b3c06007bc62a\",\"license\":\"Unlicense\",\"urls\":[\"bzz-raw://1b2b64668ea4287dfe75e1029fef387b0e3ae191b784d1bc5be01edac6d1d5c5\",\"dweb:/ipfs/Qma3zAe3Svez1kdGc5F356m9tRjCDg8F8tAocbd5Qk13PE\"]},\"src/lib/Path.sol\":{\"keccak256\":\"0xb22c562b5175d50dbcc2224325666090d985f052abdcfe275c8dfc884e34de61\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://27aeff27314476ab3c77313ae1f0c5b2442b86315f5ce741cb2150a87c3cbad3\",\"dweb:/ipfs/QmQNno2g1CJvjnH6ych4LuHr1UZDEZPACgYG4XvivxGrqV\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.23+commit.f704f362"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"_assetManager","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"previousOwner","type":"address","indexed":true},{"internalType":"address","name":"newOwner","type":"address","indexed":true}],"type":"event","name":"OwnershipTransferred","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"assetManager","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getWithdrawAddress","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"guard","outputs":[{"internalType":"contract GuardV0","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"initialiseOwnership"},{"inputs":[],"stateMutability":"view","type":"function","name":"isDisabled","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes","name":"callData","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"performCall"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"renounceOwnership"},{"inputs":[{"internalType":"contract GuardV0","name":"_guard","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"resetGuard"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"transferOwnership"},{"inputs":[{"internalType":"address","name":"_assetManager","type":"address"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"updateAssetManager"},{"inputs":[],"stateMutability":"view","type":"function","name":"withdrawAddress","outputs":[{"internalType":"address","name":"","type":"address"}]}],"devdoc":{"kind":"dev","methods":{"owner()":{"details":"Returns the address of the current owner."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."}},"version":1},"userdoc":{"kind":"user","methods":{"getWithdrawAddress()":{"notice":"Allow single withdrawal destination. Preferably multisig/DAO treasury address."},"initialiseOwnership(address)":{"notice":"Initialise vault and guard for a withdrawal destination."},"isDisabled()":{"notice":"Asset manager can no longer trade on this vault. Emergency pause set by the governance. Disable with updateAssetManager()."},"updateAssetManager(address,string)":{"notice":"Change the asset manager. Set to zero address to disable asset manager."}},"version":1}},"settings":{"remappings":["@openzeppelin/=lib/openzeppelin-contracts/contracts/","ds-test/=lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin/=lib/openzeppelin-contracts/contracts/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/SimpleVaultV0.sol":"SimpleVaultV0"},"evmVersion":"paris","libraries":{}},"sources":{"lib/openzeppelin-contracts/contracts/access/Ownable.sol":{"keccak256":"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218","urls":["bzz-raw://fc980984badf3984b6303b377711220e067722bbd6a135b24669ff5069ef9f32","dweb:/ipfs/QmPHXMSXj99XjSVM21YsY6aNtLLjLVXDbyN76J5HQYvvrz"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"keccak256":"0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305","urls":["bzz-raw://bd39944e8fc06be6dbe2dd1d8449b5336e23c6a7ba3e8e9ae5ae0f37f35283f5","dweb:/ipfs/QmPV3FGYjVwvKSgAXKUN3r9T9GwniZz83CxBpM7vyj2G53"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Context.sol":{"keccak256":"0xa92e4fa126feb6907daa0513ddd816b2eb91f30a808de54f63c17d0e162c3439","urls":["bzz-raw://a367861093b74443b137564d3f3c472f70bcf114739e62059c939f25e315706c","dweb:/ipfs/Qmd7JMpcxD9RuQjK3uM3EzJUgSqdN8vzp8eytEiuwxQJ6h"],"license":"MIT"},"src/GuardV0.sol":{"keccak256":"0x9a9aab013b396c3716f8bb91f21c213c04297f6caa6ad15c34532dafa240b9ab","urls":["bzz-raw://75e862d1fc197f8a6b3016971b610558906b657335d7f238c7c9d31f8f46252b","dweb:/ipfs/QmTEXH8E9B7zkxnG4XoFaQav36wG2p93wjAap8x36sEtTq"],"license":null},"src/IGuard.sol":{"keccak256":"0xb7b3ef010870980bd812779fd5dc8133d6dccb0e2b5d390dcfdc7a61c5064559","urls":["bzz-raw://17226392a130d807b0e1cd46f3b3fa8bf36d4f4cac6218f09d2dca75605945a3","dweb:/ipfs/QmYgn6g7B2wU6VYrhtZicWohw795yyu6qUD1riWaG2hikD"],"license":null},"src/SimpleVaultV0.sol":{"keccak256":"0x28de4090f998d49a9e829c2bbf4d18f68774c2e0df71d9347f7d28a633fa8358","urls":["bzz-raw://f859db4a725bc09d1556103b93ae48c166b74482d7c5417a22a6e3088125f1e4","dweb:/ipfs/QmcyuWDou6L57FVsid9dbfqq3uDqo3iYrDyiEAiTpo1EBM"],"license":null},"src/lib/BytesLib.sol":{"keccak256":"0x7446c0f0de6eb147f0f3e40b3a72e39d02a951e8c453437dcc6b3c06007bc62a","urls":["bzz-raw://1b2b64668ea4287dfe75e1029fef387b0e3ae191b784d1bc5be01edac6d1d5c5","dweb:/ipfs/Qma3zAe3Svez1kdGc5F356m9tRjCDg8F8tAocbd5Qk13PE"],"license":"Unlicense"},"src/lib/Path.sol":{"keccak256":"0xb22c562b5175d50dbcc2224325666090d985f052abdcfe275c8dfc884e34de61","urls":["bzz-raw://27aeff27314476ab3c77313ae1f0c5b2442b86315f5ce741cb2150a87c3cbad3","dweb:/ipfs/QmQNno2g1CJvjnH6ych4LuHr1UZDEZPACgYG4XvivxGrqV"],"license":"GPL-2.0-or-later"}},"version":1},"ast":{"absolutePath":"src/SimpleVaultV0.sol","id":1955,"exportedSymbols":{"BytesLib":[2099],"Context":[220],"GuardV0":[1751],"IERC20":[190],"IGuard":[1763],"Ownable":[112],"Path":[2232],"SimpleVaultV0":[1954]},"nodeType":"SourceUnit","src":"51:2992:5","nodes":[{"id":1765,"nodeType":"PragmaDirective","src":"51:23:5","nodes":[],"literals":["solidity","^","0.8",".0"]},{"id":1766,"nodeType":"ImportDirective","src":"76:42:5","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/access/Ownable.sol","file":"@openzeppelin/access/Ownable.sol","nameLocation":"-1:-1:-1","scope":1955,"sourceUnit":113,"symbolAliases":[],"unitAlias":""},{"id":1767,"nodeType":"ImportDirective","src":"119:46:5","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/token/ERC20/IERC20.sol","nameLocation":"-1:-1:-1","scope":1955,"sourceUnit":191,"symbolAliases":[],"unitAlias":""},{"id":1768,"nodeType":"ImportDirective","src":"167:23:5","nodes":[],"absolutePath":"src/GuardV0.sol","file":"./GuardV0.sol","nameLocation":"-1:-1:-1","scope":1955,"sourceUnit":1752,"symbolAliases":[],"unitAlias":""},{"id":1954,"nodeType":"ContractDefinition","src":"472:2570:5","nodes":[{"id":1773,"nodeType":"VariableDeclaration","src":"513:27:5","nodes":[],"constant":false,"functionSelector":"94217ad1","mutability":"mutable","name":"assetManager","nameLocation":"528:12:5","scope":1954,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1772,"name":"address","nodeType":"ElementaryTypeName","src":"513:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"id":1775,"nodeType":"VariableDeclaration","src":"547:30:5","nodes":[],"constant":false,"functionSelector":"1581b600","mutability":"mutable","name":"withdrawAddress","nameLocation":"562:15:5","scope":1954,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1774,"name":"address","nodeType":"ElementaryTypeName","src":"547:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"id":1778,"nodeType":"VariableDeclaration","src":"584:20:5","nodes":[],"constant":false,"functionSelector":"7ceab3b1","mutability":"mutable","name":"guard","nameLocation":"599:5:5","scope":1954,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_GuardV0_$1751","typeString":"contract GuardV0"},"typeName":{"id":1777,"nodeType":"UserDefinedTypeName","pathNode":{"id":1776,"name":"GuardV0","nameLocations":["584:7:5"],"nodeType":"IdentifierPath","referencedDeclaration":1751,"src":"584:7:5"},"referencedDeclaration":1751,"src":"584:7:5","typeDescriptions":{"typeIdentifier":"t_contract$_GuardV0_$1751","typeString":"contract GuardV0"}},"visibility":"public"},{"id":1804,"nodeType":"FunctionDefinition","src":"611:235:5","nodes":[],"body":{"id":1803,"nodeType":"Block","src":"656:190:5","nodes":[],"statements":[{"expression":{"id":1790,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1785,"name":"guard","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1778,"src":"666:5:5","typeDescriptions":{"typeIdentifier":"t_contract$_GuardV0_$1751","typeString":"contract GuardV0"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"id":1788,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"NewExpression","src":"674:11:5","typeDescriptions":{"typeIdentifier":"t_function_creation_nonpayable$__$returns$_t_contract$_GuardV0_$1751_$","typeString":"function () returns (contract GuardV0)"},"typeName":{"id":1787,"nodeType":"UserDefinedTypeName","pathNode":{"id":1786,"name":"GuardV0","nameLocations":["678:7:5"],"nodeType":"IdentifierPath","referencedDeclaration":1751,"src":"678:7:5"},"referencedDeclaration":1751,"src":"678:7:5","typeDescriptions":{"typeIdentifier":"t_contract$_GuardV0_$1751","typeString":"contract GuardV0"}}},"id":1789,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"674:13:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_GuardV0_$1751","typeString":"contract GuardV0"}},"src":"666:21:5","typeDescriptions":{"typeIdentifier":"t_contract$_GuardV0_$1751","typeString":"contract GuardV0"}},"id":1791,"nodeType":"ExpressionStatement","src":"666:21:5"},{"expression":{"id":1794,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1792,"name":"assetManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1773,"src":"739:12:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":1793,"name":"_assetManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1780,"src":"754:13:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"739:28:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1795,"nodeType":"ExpressionStatement","src":"739:28:5"},{"expression":{"arguments":[{"id":1799,"name":"_assetManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1780,"src":"795:13:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"496e697469616c206173736574206d616e6167657220736574","id":1800,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"810:27:5","typeDescriptions":{"typeIdentifier":"t_stringliteral_2448dcd631e8e150451d7d2ee1e758e523582a348534b04e230f7053b70eb911","typeString":"literal_string \"Initial asset manager set\""},"value":"Initial asset manager set"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_stringliteral_2448dcd631e8e150451d7d2ee1e758e523582a348534b04e230f7053b70eb911","typeString":"literal_string \"Initial asset manager set\""}],"expression":{"id":1796,"name":"guard","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1778,"src":"777:5:5","typeDescriptions":{"typeIdentifier":"t_contract$_GuardV0_$1751","typeString":"contract GuardV0"}},"id":1798,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"783:11:5","memberName":"allowSender","nodeType":"MemberAccess","referencedDeclaration":534,"src":"777:17:5","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$","typeString":"function (address,string memory) external"}},"id":1801,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"777:61:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1802,"nodeType":"ExpressionStatement","src":"777:61:5"}]},"implemented":true,"kind":"constructor","modifiers":[{"arguments":[],"id":1783,"kind":"baseConstructorSpecifier","modifierName":{"id":1782,"name":"Ownable","nameLocations":["646:7:5"],"nodeType":"IdentifierPath","referencedDeclaration":112,"src":"646:7:5"},"nodeType":"ModifierInvocation","src":"646:9:5"}],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":1781,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1780,"mutability":"mutable","name":"_assetManager","nameLocation":"631:13:5","nodeType":"VariableDeclaration","scope":1804,"src":"623:21:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1779,"name":"address","nodeType":"ElementaryTypeName","src":"623:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"622:23:5"},"returnParameters":{"id":1784,"nodeType":"ParameterList","parameters":[],"src":"656:0:5"},"scope":1954,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":1840,"nodeType":"FunctionDefinition","src":"932:479:5","nodes":[],"body":{"id":1839,"nodeType":"Block","src":"996:415:5","nodes":[],"statements":[{"expression":{"arguments":[{"id":1815,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1807,"src":"1136:6:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"496e697469616c206f776e65722063616e207769746864726177","id":1816,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1144:28:5","typeDescriptions":{"typeIdentifier":"t_stringliteral_0ffd54499e3965cac050a19918fedd9f04c45ca55ecfb4fcded98eeb299a9de9","typeString":"literal_string \"Initial owner can withdraw\""},"value":"Initial owner can withdraw"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_stringliteral_0ffd54499e3965cac050a19918fedd9f04c45ca55ecfb4fcded98eeb299a9de9","typeString":"literal_string \"Initial owner can withdraw\""}],"expression":{"id":1812,"name":"guard","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1778,"src":"1105:5:5","typeDescriptions":{"typeIdentifier":"t_contract$_GuardV0_$1751","typeString":"contract GuardV0"}},"id":1814,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1111:24:5","memberName":"allowWithdrawDestination","nodeType":"MemberAccess","referencedDeclaration":616,"src":"1105:30:5","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$","typeString":"function (address,string memory) external"}},"id":1817,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1105:68:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1818,"nodeType":"ExpressionStatement","src":"1105:68:5"},{"expression":{"arguments":[{"arguments":[{"id":1824,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1211:4:5","typeDescriptions":{"typeIdentifier":"t_contract$_SimpleVaultV0_$1954","typeString":"contract SimpleVaultV0"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SimpleVaultV0_$1954","typeString":"contract SimpleVaultV0"}],"id":1823,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1203:7:5","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1822,"name":"address","nodeType":"ElementaryTypeName","src":"1203:7:5","typeDescriptions":{}}},"id":1825,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1203:13:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"5661756c742063616e207265636569766520746f6b656e732066726f6d2061207472616465","id":1826,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1218:39:5","typeDescriptions":{"typeIdentifier":"t_stringliteral_210eb4a8752ef71be709b3b995d7163d16cdb25728842ab365a07f29873d2643","typeString":"literal_string \"Vault can receive tokens from a trade\""},"value":"Vault can receive tokens from a trade"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_stringliteral_210eb4a8752ef71be709b3b995d7163d16cdb25728842ab365a07f29873d2643","typeString":"literal_string \"Vault can receive tokens from a trade\""}],"expression":{"id":1819,"name":"guard","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1778,"src":"1183:5:5","typeDescriptions":{"typeIdentifier":"t_contract$_GuardV0_$1751","typeString":"contract GuardV0"}},"id":1821,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1189:13:5","memberName":"allowReceiver","nodeType":"MemberAccess","referencedDeclaration":575,"src":"1183:19:5","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$","typeString":"function (address,string memory) external"}},"id":1827,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1183:75:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1828,"nodeType":"ExpressionStatement","src":"1183:75:5"},{"expression":{"arguments":[{"id":1832,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1807,"src":"1292:6:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":1829,"name":"guard","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1778,"src":"1268:5:5","typeDescriptions":{"typeIdentifier":"t_contract$_GuardV0_$1751","typeString":"contract GuardV0"}},"id":1831,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1274:17:5","memberName":"transferOwnership","nodeType":"MemberAccess","referencedDeclaration":91,"src":"1268:23:5","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$returns$__$","typeString":"function (address) external"}},"id":1833,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1268:31:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1834,"nodeType":"ExpressionStatement","src":"1268:31:5"},{"expression":{"arguments":[{"id":1836,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1807,"src":"1397:6:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1835,"name":"transferOwnership","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":91,"src":"1379:17:5","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":1837,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1379:25:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1838,"nodeType":"ExpressionStatement","src":"1379:25:5"}]},"documentation":{"id":1805,"nodeType":"StructuredDocumentation","src":"852:75:5","text":" Initialise vault and guard for a withdrawal destination."},"functionSelector":"37cfecf2","implemented":true,"kind":"function","modifiers":[{"id":1810,"kind":"modifierInvocation","modifierName":{"id":1809,"name":"onlyOwner","nameLocations":["977:9:5"],"nodeType":"IdentifierPath","referencedDeclaration":31,"src":"977:9:5"},"nodeType":"ModifierInvocation","src":"977:9:5"}],"name":"initialiseOwnership","nameLocation":"941:19:5","parameters":{"id":1808,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1807,"mutability":"mutable","name":"_owner","nameLocation":"969:6:5","nodeType":"VariableDeclaration","scope":1840,"src":"961:14:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1806,"name":"address","nodeType":"ElementaryTypeName","src":"961:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"960:16:5"},"returnParameters":{"id":1811,"nodeType":"ParameterList","parameters":[],"src":"996:0:5"},"scope":1954,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":1853,"nodeType":"FunctionDefinition","src":"1417:86:5","nodes":[],"body":{"id":1852,"nodeType":"Block","src":"1472:31:5","nodes":[],"statements":[{"expression":{"id":1850,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1848,"name":"guard","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1778,"src":"1482:5:5","typeDescriptions":{"typeIdentifier":"t_contract$_GuardV0_$1751","typeString":"contract GuardV0"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":1849,"name":"_guard","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1843,"src":"1490:6:5","typeDescriptions":{"typeIdentifier":"t_contract$_GuardV0_$1751","typeString":"contract GuardV0"}},"src":"1482:14:5","typeDescriptions":{"typeIdentifier":"t_contract$_GuardV0_$1751","typeString":"contract GuardV0"}},"id":1851,"nodeType":"ExpressionStatement","src":"1482:14:5"}]},"functionSelector":"d1357336","implemented":true,"kind":"function","modifiers":[{"id":1846,"kind":"modifierInvocation","modifierName":{"id":1845,"name":"onlyOwner","nameLocations":["1453:9:5"],"nodeType":"IdentifierPath","referencedDeclaration":31,"src":"1453:9:5"},"nodeType":"ModifierInvocation","src":"1453:9:5"}],"name":"resetGuard","nameLocation":"1426:10:5","parameters":{"id":1844,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1843,"mutability":"mutable","name":"_guard","nameLocation":"1445:6:5","nodeType":"VariableDeclaration","scope":1853,"src":"1437:14:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_GuardV0_$1751","typeString":"contract GuardV0"},"typeName":{"id":1842,"nodeType":"UserDefinedTypeName","pathNode":{"id":1841,"name":"GuardV0","nameLocations":["1437:7:5"],"nodeType":"IdentifierPath","referencedDeclaration":1751,"src":"1437:7:5"},"referencedDeclaration":1751,"src":"1437:7:5","typeDescriptions":{"typeIdentifier":"t_contract$_GuardV0_$1751","typeString":"contract GuardV0"}},"visibility":"internal"}],"src":"1436:16:5"},"returnParameters":{"id":1847,"nodeType":"ParameterList","parameters":[],"src":"1472:0:5"},"scope":1954,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":1863,"nodeType":"FunctionDefinition","src":"1625:91:5","nodes":[],"body":{"id":1862,"nodeType":"Block","src":"1685:31:5","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":1859,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40,"src":"1702:5:5","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":1860,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1702:7:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":1858,"id":1861,"nodeType":"Return","src":"1695:14:5"}]},"documentation":{"id":1854,"nodeType":"StructuredDocumentation","src":"1509:111:5","text":" Allow single withdrawal destination.\n Preferably multisig/DAO treasury address."},"functionSelector":"e8e7f800","implemented":true,"kind":"function","modifiers":[],"name":"getWithdrawAddress","nameLocation":"1634:18:5","parameters":{"id":1855,"nodeType":"ParameterList","parameters":[],"src":"1652:2:5"},"returnParameters":{"id":1858,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1857,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1863,"src":"1676:7:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1856,"name":"address","nodeType":"ElementaryTypeName","src":"1676:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1675:9:5"},"scope":1954,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":1877,"nodeType":"FunctionDefinition","src":"1882:99:5","nodes":[],"body":{"id":1876,"nodeType":"Block","src":"1931:50:5","nodes":[],"statements":[{"expression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1874,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1869,"name":"assetManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1773,"src":"1948:12:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":1872,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1972:1:5","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":1871,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1964:7:5","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1870,"name":"address","nodeType":"ElementaryTypeName","src":"1964:7:5","typeDescriptions":{}}},"id":1873,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1964:10:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1948:26:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":1868,"id":1875,"nodeType":"Return","src":"1941:33:5"}]},"documentation":{"id":1864,"nodeType":"StructuredDocumentation","src":"1722:155:5","text":" Asset manager can no longer trade on this vault.\n Emergency pause set by the governance. Disable with updateAssetManager()."},"functionSelector":"6c57f5a9","implemented":true,"kind":"function","modifiers":[],"name":"isDisabled","nameLocation":"1891:10:5","parameters":{"id":1865,"nodeType":"ParameterList","parameters":[],"src":"1901:2:5"},"returnParameters":{"id":1868,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1867,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1877,"src":"1925:4:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1866,"name":"bool","nodeType":"ElementaryTypeName","src":"1925:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1924:6:5"},"scope":1954,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":1922,"nodeType":"FunctionDefinition","src":"2103:344:5","nodes":[],"body":{"id":1921,"nodeType":"Block","src":"2194:253:5","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1892,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1887,"name":"assetManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1773,"src":"2207:12:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":1890,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2231:1:5","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":1889,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2223:7:5","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1888,"name":"address","nodeType":"ElementaryTypeName","src":"2223:7:5","typeDescriptions":{}}},"id":1891,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2223:10:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2207:26:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1901,"nodeType":"IfStatement","src":"2204:95:5","trueBody":{"id":1900,"nodeType":"Block","src":"2235:64:5","statements":[{"expression":{"arguments":[{"id":1896,"name":"assetManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1773,"src":"2268:12:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1897,"name":"notes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1882,"src":"2282:5:5","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}],"expression":{"id":1893,"name":"guard","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1778,"src":"2249:5:5","typeDescriptions":{"typeIdentifier":"t_contract$_GuardV0_$1751","typeString":"contract GuardV0"}},"id":1895,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2255:12:5","memberName":"removeSender","nodeType":"MemberAccess","referencedDeclaration":554,"src":"2249:18:5","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$","typeString":"function (address,string memory) external"}},"id":1898,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2249:39:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1899,"nodeType":"ExpressionStatement","src":"2249:39:5"}]}},{"expression":{"id":1904,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1902,"name":"assetManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1773,"src":"2308:12:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":1903,"name":"_assetManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1880,"src":"2323:13:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2308:28:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1905,"nodeType":"ExpressionStatement","src":"2308:28:5"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1911,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1906,"name":"assetManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1773,"src":"2349:12:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":1909,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2373:1:5","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":1908,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2365:7:5","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1907,"name":"address","nodeType":"ElementaryTypeName","src":"2365:7:5","typeDescriptions":{}}},"id":1910,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2365:10:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2349:26:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1920,"nodeType":"IfStatement","src":"2346:95:5","trueBody":{"id":1919,"nodeType":"Block","src":"2377:64:5","statements":[{"expression":{"arguments":[{"id":1915,"name":"_assetManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1880,"src":"2409:13:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1916,"name":"notes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1882,"src":"2424:5:5","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}],"expression":{"id":1912,"name":"guard","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1778,"src":"2391:5:5","typeDescriptions":{"typeIdentifier":"t_contract$_GuardV0_$1751","typeString":"contract GuardV0"}},"id":1914,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2397:11:5","memberName":"allowSender","nodeType":"MemberAccess","referencedDeclaration":534,"src":"2391:17:5","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$","typeString":"function (address,string memory) external"}},"id":1917,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2391:39:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1918,"nodeType":"ExpressionStatement","src":"2391:39:5"}]}}]},"documentation":{"id":1878,"nodeType":"StructuredDocumentation","src":"1987:111:5","text":" Change the asset manager.\n Set to zero address to disable asset manager."},"functionSelector":"4a0e159d","implemented":true,"kind":"function","modifiers":[{"id":1885,"kind":"modifierInvocation","modifierName":{"id":1884,"name":"onlyOwner","nameLocations":["2184:9:5"],"nodeType":"IdentifierPath","referencedDeclaration":31,"src":"2184:9:5"},"nodeType":"ModifierInvocation","src":"2184:9:5"}],"name":"updateAssetManager","nameLocation":"2112:18:5","parameters":{"id":1883,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1880,"mutability":"mutable","name":"_assetManager","nameLocation":"2139:13:5","nodeType":"VariableDeclaration","scope":1922,"src":"2131:21:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1879,"name":"address","nodeType":"ElementaryTypeName","src":"2131:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1882,"mutability":"mutable","name":"notes","nameLocation":"2170:5:5","nodeType":"VariableDeclaration","scope":1922,"src":"2154:21:5","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":1881,"name":"string","nodeType":"ElementaryTypeName","src":"2154:6:5","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2130:46:5"},"returnParameters":{"id":1886,"nodeType":"ParameterList","parameters":[],"src":"2194:0:5"},"scope":1954,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":1953,"nodeType":"FunctionDefinition","src":"2453:586:5","nodes":[],"body":{"id":1952,"nodeType":"Block","src":"2524:515:5","nodes":[],"statements":[{"expression":{"arguments":[{"expression":{"id":1932,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2620:3:5","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":1933,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2624:6:5","memberName":"sender","nodeType":"MemberAccess","src":"2620:10:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1934,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1924,"src":"2632:6:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1935,"name":"callData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1926,"src":"2640:8:5","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"expression":{"id":1929,"name":"guard","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1778,"src":"2601:5:5","typeDescriptions":{"typeIdentifier":"t_contract$_GuardV0_$1751","typeString":"contract GuardV0"}},"id":1931,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2607:12:5","memberName":"validateCall","nodeType":"MemberAccess","referencedDeclaration":1102,"src":"2601:18:5","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,address,bytes memory) view external"}},"id":1936,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2601:48:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1937,"nodeType":"ExpressionStatement","src":"2601:48:5"},{"assignments":[1939,1941],"declarations":[{"constant":false,"id":1939,"mutability":"mutable","name":"success","nameLocation":"2724:7:5","nodeType":"VariableDeclaration","scope":1952,"src":"2719:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1938,"name":"bool","nodeType":"ElementaryTypeName","src":"2719:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1941,"mutability":"mutable","name":"returnData","nameLocation":"2746:10:5","nodeType":"VariableDeclaration","scope":1952,"src":"2733:23:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1940,"name":"bytes","nodeType":"ElementaryTypeName","src":"2733:5:5","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":1946,"initialValue":{"arguments":[{"id":1944,"name":"callData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1926,"src":"2772:8:5","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"expression":{"id":1942,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1924,"src":"2760:6:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1943,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2767:4:5","memberName":"call","nodeType":"MemberAccess","src":"2760:11:5","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":1945,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2760:21:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"2718:63:5"},{"condition":{"id":1948,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"2795:8:5","subExpression":{"id":1947,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1939,"src":"2796:7:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1951,"nodeType":"IfStatement","src":"2792:241:5","trueBody":{"id":1950,"nodeType":"Block","src":"2805:228:5","statements":[{"AST":{"nativeSrc":"2827:196:5","nodeType":"YulBlock","src":"2827:196:5","statements":[{"nativeSrc":"2845:43:5","nodeType":"YulVariableDeclaration","src":"2845:43:5","value":{"arguments":[{"name":"returnData","nativeSrc":"2877:10:5","nodeType":"YulIdentifier","src":"2877:10:5"}],"functionName":{"name":"mload","nativeSrc":"2871:5:5","nodeType":"YulIdentifier","src":"2871:5:5"},"nativeSrc":"2871:17:5","nodeType":"YulFunctionCall","src":"2871:17:5"},"variables":[{"name":"revertStringLength","nativeSrc":"2849:18:5","nodeType":"YulTypedName","src":"2849:18:5","type":""}]},{"nativeSrc":"2905:44:5","nodeType":"YulVariableDeclaration","src":"2905:44:5","value":{"arguments":[{"name":"returnData","nativeSrc":"2932:10:5","nodeType":"YulIdentifier","src":"2932:10:5"},{"kind":"number","nativeSrc":"2944:4:5","nodeType":"YulLiteral","src":"2944:4:5","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"2928:3:5","nodeType":"YulIdentifier","src":"2928:3:5"},"nativeSrc":"2928:21:5","nodeType":"YulFunctionCall","src":"2928:21:5"},"variables":[{"name":"revertStringPtr","nativeSrc":"2909:15:5","nodeType":"YulTypedName","src":"2909:15:5","type":""}]},{"expression":{"arguments":[{"name":"revertStringPtr","nativeSrc":"2973:15:5","nodeType":"YulIdentifier","src":"2973:15:5"},{"name":"revertStringLength","nativeSrc":"2990:18:5","nodeType":"YulIdentifier","src":"2990:18:5"}],"functionName":{"name":"revert","nativeSrc":"2966:6:5","nodeType":"YulIdentifier","src":"2966:6:5"},"nativeSrc":"2966:43:5","nodeType":"YulFunctionCall","src":"2966:43:5"},"nativeSrc":"2966:43:5","nodeType":"YulExpressionStatement","src":"2966:43:5"}]},"evmVersion":"paris","externalReferences":[{"declaration":1941,"isOffset":false,"isSlot":false,"src":"2877:10:5","valueSize":1},{"declaration":1941,"isOffset":false,"isSlot":false,"src":"2932:10:5","valueSize":1}],"id":1949,"nodeType":"InlineAssembly","src":"2819:204:5"}]}}]},"functionSelector":"d2f73e3d","implemented":true,"kind":"function","modifiers":[],"name":"performCall","nameLocation":"2462:11:5","parameters":{"id":1927,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1924,"mutability":"mutable","name":"target","nameLocation":"2482:6:5","nodeType":"VariableDeclaration","scope":1953,"src":"2474:14:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1923,"name":"address","nodeType":"ElementaryTypeName","src":"2474:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1926,"mutability":"mutable","name":"callData","nameLocation":"2505:8:5","nodeType":"VariableDeclaration","scope":1953,"src":"2490:23:5","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":1925,"name":"bytes","nodeType":"ElementaryTypeName","src":"2490:5:5","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2473:41:5"},"returnParameters":{"id":1928,"nodeType":"ParameterList","parameters":[],"src":"2524:0:5"},"scope":1954,"stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"abstract":false,"baseContracts":[{"baseName":{"id":1770,"name":"Ownable","nameLocations":["498:7:5"],"nodeType":"IdentifierPath","referencedDeclaration":112,"src":"498:7:5"},"id":1771,"nodeType":"InheritanceSpecifier","src":"498:7:5"}],"canonicalName":"SimpleVaultV0","contractDependencies":[1751],"contractKind":"contract","documentation":{"id":1769,"nodeType":"StructuredDocumentation","src":"193:278:5","text":" Simple vault allowing delegating of a trading activites to a hot wallet.\n - Self-contained\n - Guard is used to check asset manager can only perform approved operations.\n - No shares, single owner\n - No accounting\n - No slippage protection (unlike Enzyme)"},"fullyImplemented":true,"linearizedBaseContracts":[1954,112,220],"name":"SimpleVaultV0","nameLocation":"481:13:5","scope":1955,"usedErrors":[],"usedEvents":[13]}]},"id":5} \ No newline at end of file +{"abi":[{"type":"constructor","inputs":[{"name":"_assetManager","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"assetManager","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"getWithdrawAddress","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"guard","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract GuardV0"}],"stateMutability":"view"},{"type":"function","name":"initialiseOwnership","inputs":[{"name":"_owner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"isDisabled","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"performCall","inputs":[{"name":"target","type":"address","internalType":"address"},{"name":"callData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"resetGuard","inputs":[{"name":"_guard","type":"address","internalType":"contract GuardV0"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"updateAssetManager","inputs":[{"name":"_assetManager","type":"address","internalType":"address"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"withdrawAddress","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false}],"bytecode":{"object":"0x608060405234801561001057600080fd5b50604051613d46380380613d4683398101604081905261002f91610177565b6100383361011a565b6040516100449061016a565b604051809103906000f080158015610060573d6000803e3d6000fd5b50600380546001600160a01b039283166001600160a01b0319918216811790925560018054938516939091168317905560408051631f458b3960e31b815260048101939093526024830152601960448301527f496e697469616c206173736574206d616e61676572207365740000000000000060648301529063fa2c59c890608401600060405180830381600087803b1580156100fc57600080fd5b505af1158015610110573d6000803e3d6000fd5b50505050506101a7565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61334180610a0583390190565b60006020828403121561018957600080fd5b81516001600160a01b03811681146101a057600080fd5b9392505050565b61084f806101b66000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c80638da5cb5b116100715780638da5cb5b1461014957806394217ad11461015a578063d13573361461016d578063d2f73e3d14610180578063e8e7f80014610149578063f2fde38b1461019357600080fd5b80631581b600146100b957806337cfecf2146100e95780634a0e159d146100fe5780636c57f5a914610111578063715018a61461012e5780637ceab3b114610136575b600080fd5b6002546100cc906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6100fc6100f73660046106b9565b6101a6565b005b6100fc61010c366004610726565b61034e565b6001546040516001600160a01b03909116151581526020016100e0565b6100fc610461565b6003546100cc906001600160a01b031681565b6000546001600160a01b03166100cc565b6001546100cc906001600160a01b031681565b6100fc61017b3660046106b9565b610475565b6100fc61018e366004610726565b61049f565b6100fc6101a13660046106b9565b61057f565b6101ae6105fa565b60035460408051632d670ec960e11b81526001600160a01b0384811660048301526024820192909252601a60448201527f496e697469616c206f776e65722063616e2077697468647261770000000000006064820152911690635ace1d9290608401600060405180830381600087803b15801561022a57600080fd5b505af115801561023e573d6000803e3d6000fd5b5050600354604080516372e548a960e01b81523060048201526024810191909152602560448201527f5661756c742063616e207265636569766520746f6b656e732066726f6d206120606482015264747261646560d81b60848201526001600160a01b0390911692506372e548a9915060a401600060405180830381600087803b1580156102cb57600080fd5b505af11580156102df573d6000803e3d6000fd5b505060035460405163f2fde38b60e01b81526001600160a01b038581166004830152909116925063f2fde38b9150602401600060405180830381600087803b15801561032a57600080fd5b505af115801561033e573d6000803e3d6000fd5b5050505061034b8161057f565b50565b6103566105fa565b6001546001600160a01b0316156103d25760035460015460405163299f87d560e21b81526001600160a01b039283169263a67e1f549261039f92911690869086906004016107a4565b600060405180830381600087803b1580156103b957600080fd5b505af11580156103cd573d6000803e3d6000fd5b505050505b600180546001600160a01b0319166001600160a01b0385169081179091551561045c57600354604051631f458b3960e31b81526001600160a01b039091169063fa2c59c890610429908690869086906004016107a4565b600060405180830381600087803b15801561044357600080fd5b505af1158015610457573d6000803e3d6000fd5b505050505b505050565b6104696105fa565b6104736000610654565b565b61047d6105fa565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b600354604051636d5025f160e01b81526001600160a01b0390911690636d5025f1906104d59033908790879087906004016107d2565b60006040518083038186803b1580156104ed57600080fd5b505afa158015610501573d6000803e3d6000fd5b50505050600080846001600160a01b03168484604051610522929190610809565b6000604051808303816000865af19150503d806000811461055f576040519150601f19603f3d011682016040523d82523d6000602084013e610564565b606091505b509150915081610578578051602082018181fd5b5050505050565b6105876105fa565b6001600160a01b0381166105f15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61034b81610654565b6000546001600160a01b031633146104735760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105e8565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116811461034b57600080fd5b6000602082840312156106cb57600080fd5b81356106d6816106a4565b9392505050565b60008083601f8401126106ef57600080fd5b50813567ffffffffffffffff81111561070757600080fd5b60208301915083602082850101111561071f57600080fd5b9250929050565b60008060006040848603121561073b57600080fd5b8335610746816106a4565b9250602084013567ffffffffffffffff81111561076257600080fd5b61076e868287016106dd565b9497909650939450505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b03841681526040602082018190526000906107c9908301848661077b565b95945050505050565b6001600160a01b038581168252841660208201526060604082018190526000906107ff908301848661077b565b9695505050505050565b818382376000910190815291905056fea26469706673582212206079472c105f7c72fe2df74f6f36084929e82eac7e09a62cafe38230686fb6b264736f6c63430008170033608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6132c2806200007f6000396000f3fe608060405234801561001057600080fd5b50600436106103995760003560e01c80638c2fdf9e116101e9578063d7334c9d1161010f578063f259a073116100ad578063f901dc331161007c578063f901dc3314610890578063fa2c59c8146108a3578063fadbcf48146108b6578063fdedfa27146108d957600080fd5b8063f259a0731461039e578063f26749f314610857578063f2fde38b1461086a578063f76081e41461087d57600080fd5b8063ebe26816116100e9578063ebe26816146107ed578063ee5462cc14610800578063efb47bff14610813578063f20e85e01461084457600080fd5b8063d7334c9d146107a4578063e98539c5146107b7578063eb0de042146107ca57600080fd5b8063a847cf4d11610187578063c537bed011610156578063c537bed01461076b578063ca963c501461058a578063d075f9bb1461077e578063d4c0fe451461079157600080fd5b8063a847cf4d146106e2578063a9fc3d4f14610710578063be8c97b014610727578063c4cc9dba1461075857600080fd5b806398b3cc39116101c357806398b3cc3914610686578063a1b6b43014610699578063a4c1cccb146106ac578063a67e1f54146106cf57600080fd5b80638c2fdf9e1461064f5780638da5cb5b14610662578063957dc6c01461067357600080fd5b806359b92be9116102ce5780636d9a14231161026c578063732524941161023b57806373252494146105f1578063761bcd9c146106165780637ea446551461062957806386b6dbe51461063c57600080fd5b80636d9a1423146105b0578063713ebf3b146105c3578063715018a6146105d657806372e548a9146105de57600080fd5b806363cc17f2116102a857806363cc17f2146105645780636a6d5cc8146105775780636ad113531461058a5780636d5025f11461059d57600080fd5b806359b92be91461052b5780635ace1d921461053e5780635e4ccace1461055157600080fd5b80632dc32a611161033b5780633ea35551116103155780633ea35551146104cf578063425f49d0146104e25780634b941268146104f55780634b956bd81461051857600080fd5b80632dc32a611461046857806334ec8d7e146104995780633cf20025146104ac57600080fd5b80631710a4f2116103775780631710a4f2146103fe5780631c123e77146104115780631d49039c146104245780632d12d7881461045557600080fd5b806304a3ba251461039e57806307ac3562146103b357806307ef00cf146103c6575b600080fd5b6103b16103ac3660046127c0565b6108e8565b005b6103b16103c1366004612881565b610951565b6103e96103d4366004612900565b60066020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6103b161040c366004612881565b610c92565b6103b161041f366004612881565b610d48565b6103e9610432366004612900565b6001600160a01b031660009081526007602052604090205460ff16151560011490565b6103b16104633660046127c0565b610dc2565b6103e9610476366004612900565b6001600160a01b031660009081526008602052604090205460ff16151560011490565b6103b16104a73660046127c0565b610e1e565b6103e96104ba366004612900565b60056020526000908152604090205460ff1681565b6103b16104dd3660046127c0565b610e86565b6103b16104f0366004612881565b610eb1565b6103e9610503366004612900565b60086020526000908152604090205460ff1681565b6103b1610526366004612881565b610ed3565b6103b1610539366004612881565b610f78565b6103b161054c3660046127c0565b610ffa565b6103b161055f366004612941565b611059565b6103b16105723660046127c0565b6110ef565b6103b1610585366004612881565b61114e565b6103b1610598366004612881565b6111f6565b6103b16105ab3660046129a3565b611219565b6103b16105be3660046127c0565b611798565b6103e96105d13660046129d4565b6117ce565b6103b1611806565b6103b16105ec3660046127c0565b61181a565b6000546001600160a01b03165b6040516001600160a01b0390911681526020016103f5565b6103b1610624366004612881565b611879565b6103b1610637366004612881565b611984565b6103b161064a3660046127c0565b6119c1565b6103b161065d3660046127c0565b611a20565b6000546001600160a01b03166105fe565b6103b1610681366004612881565b611a7c565b6103b16106943660046127c0565b611b3c565b6103b16106a7366004612881565b611b9b565b6103e96106ba366004612900565b60036020526000908152604090205460ff1681565b6103b16106dd3660046127c0565b611ce3565b6103e96106f03660046129d4565b600160209081526000928352604080842090915290825290205460ff1681565b61071960025481565b6040519081526020016103f5565b6103e9610735366004612900565b6001600160a01b031660009081526004602052604090205460ff16151560011490565b6103b1610766366004612881565b611d3f565b6103e9610779366004612900565b611dfa565b6103e961078c366004612900565b611e1d565b6103b161079f366004612881565b611e40565b6103b16107b2366004612941565b611e80565b6103b16107c5366004612881565b611ef3565b6103e96107d8366004612900565b60076020526000908152604090205460ff1681565b6103b16107fb366004612881565b611f95565b6103b161080e3660046127c0565b61202c565b6103e9610821366004612900565b6001600160a01b031660009081526006602052604090205460ff16151560011490565b6103b16108523660046127c0565b6120e1565b6103b16108653660046129a3565b612137565b6103b1610878366004612900565b6121ac565b6103b161088b366004612881565b612225565b6103b161089e3660046127c0565b6122a1565b6103b16108b13660046127c0565b6122fd565b6103e96108c4366004612900565b60046020526000908152604090205460ff1681565b604051600181526020016103f5565b6108f061235c565b6001600160a01b03831660009081526007602052604090819020805460ff19169055517fb71be9befd3ac90c1c9981d3b1161b3c2c6dcd741f13b34061aa251226a802df9061094490859085908590612a32565b60405180910390a1505050565b6000818060200190518101906109679190612aec565b905060005b8151811015610c8d57600082828151811061098957610989612b9c565b6020026020010151905060006109ac60006004846123b69092919063ffffffff16565b6109b590612bb2565b905060006109d360048085516109cb9190612bff565b8591906123b6565b6040805180820190915260208082527f7472616e736665724552433230496e28616464726573732c75696e74323536299101529050631dac092b60e11b6001600160e01b0319831601610a2e57610a2981610f78565b610c82565b60408051808201909152601b81527f7472616e736665724552433230416c6c496e2861646472657373290000000000602090910152635cf59cb760e11b6001600160e01b0319831601610a8457610a2981611984565b60408051808201909152601881527f6465706f73697428616464726573732c6164647265737329000000000000000060209091015262d3ec1f60e31b6001600160e01b0319831601610ad957610a2981611d3f565b60408051808201909152601981527f776974686472617728616464726573732c6164647265737329000000000000006020909101526306bf1c7b60e01b6001600160e01b0319831601610b2f57610a2981612225565b610b5660405180606001604052806027815260200161323260279139805160209091012090565b6001600160e01b031916826001600160e01b03191603610b7957610a29816111f6565b610ba060405180606001604052806028815260200161320a60289139805160209091012090565b6001600160e01b031916826001600160e01b03191603610bc357610a29816111f6565b60408051808201909152601e81527f666c61736853776170416c6c4f75742875696e743235362c627974657329000060209091015263d2b3d16560e01b6001600160e01b0319831601610c1957610a2981610eb1565b60405162461bcd60e51b815260206004820152603360248201527f76616c69646174655f3164656c74614d756c746963616c6c3a20556e6b6e6f776044820152723710333ab731ba34b7b71039b2b632b1ba37b960691b60648201526084015b60405180910390fd5b50505060010161096c565b505050565b600081806020019051810190610ca89190612c1d565b509050610cd2816001600160a01b031660009081526006602052604090205460ff16151560011490565b610d445760405162461bcd60e51b815260206004820152603c60248201527f76616c69646174655f7472616e736665723a205265636569766572206164647260448201527f657373206e6f742077686974656c6973746564206279204775617264000000006064820152608401610c79565b5050565b6000805b610d558361250d565b5092509050610d6382611dfa565b610d7f5760405162461bcd60e51b8152600401610c7990612c4b565b610d8881611dfa565b610da45760405162461bcd60e51b8152600401610c7990612c4b565b610dad83612549565b15610c8d57610dbb83612583565b9250610d4c565b610dca61235c565b6001600160a01b03831660009081526005602052604090819020805460ff19169055517f4e13b11ab98e672bd78295ef9cebe764dc617f95decf47d842c25b83abc0c7249061094490859085908590612a32565b610e5083610e496040518060600160405280603381526020016131d760339139805160209091012090565b8484611059565b610e7b83610e4960405180606001604052806034815260200161325960349139805160209091012090565b610c8d838383611b3c565b610e7b83610e4960405180608001604052806043815260200161312b60439139805160209091012090565b600081806020019051810190610ec79190612c93565b915050610d4481611b9b565b600081806020019051810190610ee99190612c1d565b509050610f13816001600160a01b031660009081526007602052604090205460ff16151560011490565b610d445760405162461bcd60e51b815260206004820152603060248201527f76616c69646174655f617070726f76653a20417070726f76652061646472657360448201526f0e640c8decae640dcdee840dac2e8c6d60831b6064820152608401610c79565b600081806020019051810190610f8e9190612c1d565b509050610f9a81611dfa565b610d445760405162461bcd60e51b815260206004820152602b60248201527f76616c69646174655f7472616e736665724552433230496e3a20546f6b656e2060448201526a1b9bdd08185b1b1bddd95960aa1b6064820152608401610c79565b61100261235c565b6001600160a01b03831660009081526006602052604090819020805460ff19166001179055517f3562181221a42a19ddd03a82dfe06acab1905ceb65cdaf7d86a1d9fec66435529061094490859085908590612a32565b61106161235c565b6001600160a01b03841660009081526001602081815260408084206001600160e01b0319881685529091528220805460ff1916909117905560028054916110a783612cd9565b91905055507fef729aaa41b9fd994f9ff7c1960df214a84f722002e6cfbea31799cd0873a3ef848484846040516110e19493929190612cf2565b60405180910390a150505050565b6110f761235c565b6001600160a01b03831660009081526008602052604090819020805460ff19166001179055517f628a44970c0e450415e3ae74334ea44f3307b74dbf677a1371190242bf2f35899061094490859085908590612a32565b600080828060200190518101906111659190612d31565b925050915061117382611dfa565b61118f5760405162461bcd60e51b8152600401610c7990612d74565b61119881611e1d565b610c8d5760405162461bcd60e51b815260206004820152602960248201527f52656365697665722061646472657373206e6f742077686974656c697374656460448201526808189e4811dd585c9960ba1b6064820152608401610c79565b60008180602001905181019061120c9190612d9f565b92505050610d4481611b9b565b6000546001600160a01b0385811691161461179257611255846001600160a01b031660009081526004602052604090205460ff16151560011490565b6112a15760405162461bcd60e51b815260206004820181905260248201527f76616c696461746543616c6c3a2053656e646572206e6f7420616c6c6f7765646044820152606401610c79565b60006112b06004828486612dee565b6112b991612e18565b90503660006112cb8460048188612dee565b915091506112d986846117ce565b6113315760405162461bcd60e51b815260206004820152602360248201527f76616c696461746543616c6c3a2043616c6c2073697465206e6f7420616c6c6f6044820152621dd95960ea1b6064820152608401610c79565b61135860405180608001604052806043815260200161312b60439139805160209091012090565b6001600160e01b031916836001600160e01b031916036113b6576113b182828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061187992505050565b61178e565b6113dd6040518060600160405280603381526020016131d760339139805160209091012090565b6001600160e01b031916836001600160e01b03191603611436576113b182828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f9592505050565b6040805180820190915260128152716d756c746963616c6c2862797465735b5d2960701b602090910152630a6d35e560e31b6001600160e01b03198416016114b7576113b182828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061095192505050565b6040805180820190915260198152787472616e7366657228616464726573732c75696e743235362960381b6020909101526356fa634560e01b6001600160e01b031984160161153f576113b182828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610c9292505050565b604080518082019091526018815277617070726f766528616464726573732c75696e743235362960401b60209091015263f6a1584d60e01b6001600160e01b03198416016115c6576113b182828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610ed392505050565b6115ed6040518060600160405280602281526020016131b560229139805160209091012090565b6001600160e01b031916836001600160e01b03191603611646576113b182828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a7c92505050565b61166d60405180606001604052806026815260200161316e60269139805160209091012090565b6001600160e01b031916836001600160e01b031916036116c6576113b182828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611e4092505050565b6116ed60405180606001604052806021815260200161319460219139805160209091012090565b6001600160e01b031916836001600160e01b03191603611746576113b182828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061114e92505050565b60405162461bcd60e51b815260206004820152601960248201527f556e6b6e6f776e2066756e6374696f6e2073656c6563746f72000000000000006044820152606401610c79565b5050505b50505050565b6117c383610e496040518060600160405280602281526020016131b560229139805160209091012090565b610c8d8383836119c1565b6001600160a01b03821660009081526001602090815260408083206001600160e01b03198516845290915290205460ff165b92915050565b61180e61235c565b61181860006125b4565b565b61182261235c565b6001600160a01b03831660009081526005602052604090819020805460ff19166001179055517f62dd88c5ecfa60713a657640ebec4de26fc1aefa4afdb24e6d15a124fce727799061094490859085908590612a32565b600080828060200190518101906118909190612e48565b509350935050506118a081611e1d565b6119275760405162461bcd60e51b815260206004820152604c60248201527f76616c69646174655f737761704578616374546f6b656e73466f72546f6b656e60448201527f733a2052656365697665722061646472657373206e6f742077686974656c697360648201526b1d195908189e4811dd585c9960a21b608482015260a401610c79565b6000805b835181101561197d5783818151811061194657611946612b9c565b6020026020010151915061195982611dfa565b6119755760405162461bcd60e51b8152600401610c7990612d74565b60010161192b565b5050505050565b60008180602001905181019061199a9190612f11565b90506119a581611dfa565b610d445760405162461bcd60e51b8152600401610c7990612f2e565b6119c961235c565b6001600160a01b03831660009081526003602052604090819020805460ff19166001179055517fad90e2570fc4fe9f7437be3188d5c791c6662892d31731992aa88f5c876219839061094490859085908590612a32565b611a2861235c565b6001600160a01b03831660009081526006602052604090819020805460ff19169055517f1212f8ddb39de8e1a339460c95752d61100723efeaa34ccd94bca94393f409389061094490859085908590612a32565b600081806020019051810190611a929190612c1d565b509050611abc816001600160a01b031660009081526008602052604090205460ff16151560011490565b610d445760405162461bcd60e51b815260206004820152604560248201527f76616c69646174655f617070726f766544656c65676174696f6e3a204170707260448201527f6f76652064656c65676174696f6e206164647265737320646f6573206e6f74206064820152640dac2e8c6d60db1b608482015260a401610c79565b611b4461235c565b6001600160a01b03831660009081526007602052604090819020805460ff19166001179055517f628a44970c0e450415e3ae74334ea44f3307b74dbf677a1371190242bf2f35899061094490859085908590612a32565b6000805b611baa836000612604565b9150611bd9600180611bbe60036014612f7c565b611bc89190612f7c565b611bd29190612f7c565b8490612604565b9050611be482611dfa565b611c005760405162461bcd60e51b8152600401610c7990612f8f565b611c0981611dfa565b611c255760405162461bcd60e51b8152600401610c7990612f8f565b600180611c3460036014612f7c565b611c3e9190612f7c565b611c489190612f7c565b6014600180611c58600384612f7c565b611c629190612f7c565b611c6c9190612f7c565b611c769190612f7c565b611c809190612f7c565b835110610c8d57611cdc600180611c9960036014612f7c565b611ca39190612f7c565b611cad9190612f7c565b600180611cbc60036014612f7c565b611cc69190612f7c565b611cd09190612f7c565b85516109cb9190612bff565b9250611b9f565b611ceb61235c565b6001600160a01b03831660009081526004602052604090819020805460ff19169055517f3097928509c53a2dab9500431201d82b0d756e8f890fd01f4ae6b33b45687ea49061094490859085908590612a32565b60008082806020019051810190611d569190612fd4565b91509150611d6382611dfa565b611d7f5760405162461bcd60e51b8152600401610c7990612f2e565b611d8881611e1d565b610c8d5760405162461bcd60e51b815260206004820152603b60248201527f76616c69646174655f6465706f7369743a20526563656976657220616464726560448201527f7373206e6f742077686974656c697374656420627920477561726400000000006064820152608401610c79565b6001600160a01b031660009081526003602052604090205460ff16151560011490565b6001600160a01b031660009081526005602052604090205460ff16151560011490565b600081806020019051810190611e56919061300e565b5050509050611e6481611dfa565b610d445760405162461bcd60e51b8152600401610c7990612d74565b611e8861235c565b6001600160a01b03841660009081526001602090815260408083206001600160e01b03198716845290915290819020805460ff19169055517f37ea10f2d08f5a9803dfcd5abf3cfc7b0d6fcdf5fcbc36be9ea5a0b53d9a4d9b906110e1908690869086908690612cf2565b600081806020019051810190611f0991906130ee565b9050611f188160200151611e1d565b611f8a5760405162461bcd60e51b815260206004820152603f60248201527f76616c69646174655f65786163744f75747075743a205265636569766572206160448201527f646472657373206e6f742077686974656c6973746564206279204775617264006064820152608401610c79565b8051610d4490610d48565b600081806020019051810190611fab91906130ee565b9050611fba8160200151611e1d565b611f8a5760405162461bcd60e51b815260206004820152603e60248201527f76616c69646174655f6578616374496e7075743a20526563656976657220616460448201527f6472657373206e6f742077686974656c697374656420627920477561726400006064820152608401610c79565b6040805180820190915260198152787472616e7366657228616464726573732c75696e743235362960381b602090910152612087837fa9059cbb2ab09eb219583f4a59a5d0623ade346d962bcd4e46b11da047c9049b610e49565b604080518082019091526018815277617070726f766528616464726573732c75696e743235362960401b6020909101526117c3837f095ea7b334ae44009aa867bfb386f5c3b4b443ac6f0ee573fa91c4608fbadfba610e49565b61210c83610e4960405180606001604052806026815260200161316e60269139805160209091012090565b610e7b83610e4960405180606001604052806021815260200161319460219139805160209091012090565b6040805180820190915260128152716d756c746963616c6c2862797465735b5d2960701b60209091015261218b847fac9650d882acfa253cba1ed543b9ff47351da99c3bd00a89625e5cdb2099009c610e49565b612196848383611b3c565b6121a1838383611b3c565b6117928483836110ef565b6121b461235c565b6001600160a01b0381166122195760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c79565b612222816125b4565b50565b6000808280602001905181019061223c9190612fd4565b9150915061224982611dfa565b611d7f5760405162461bcd60e51b8152602060048201526024808201527f76616c69646174655f77697468647261773a20546f6b656e206e6f7420616c6c6044820152631bddd95960e21b6064820152608401610c79565b6122a961235c565b6001600160a01b03831660009081526003602052604090819020805460ff19169055517f9ca3f065622f5f03f32b7157677a0e420c3a36ab45fd49f256ffebce3e3105879061094490859085908590612a32565b61230561235c565b6001600160a01b03831660009081526004602052604090819020805460ff19166001179055517fa8f9caaf4861720900294428e4ff34d37070c37afd26d96e6e4da75326d2c3ad9061094490859085908590612a32565b6000546001600160a01b031633146118185760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c79565b6060816123c481601f612f7c565b10156124035760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b6044820152606401610c79565b8261240e8382612f7c565b101561244d5760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b6044820152606401610c79565b6124578284612f7c565b8451101561249b5760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b6044820152606401610c79565b6060821580156124ba5760405191506000825260208201604052612504565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156124f35780518352602092830192016124db565b5050858452601f01601f1916604052505b50949350505050565b6000808061251b8482612604565b92506125288460146126b8565b905061254061253960036014612f7c565b8590612604565b91509193909250565b600061255760036014612f7c565b6014612564600382612f7c565b61256e9190612f7c565b6125789190612f7c565b825110159050919050565b606061180061259460036014612f7c565b6125a060036014612f7c565b84516125ac9190612bff565b8491906123b6565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600081612612816014612f7c565b10156126555760405162461bcd60e51b8152602060048201526012602482015271746f416464726573735f6f766572666c6f7760701b6044820152606401610c79565b612660826014612f7c565b835110156126a85760405162461bcd60e51b8152602060048201526015602482015274746f416464726573735f6f75744f66426f756e647360581b6044820152606401610c79565b500160200151600160601b900490565b6000816126c6816003612f7c565b10156127085760405162461bcd60e51b8152602060048201526011602482015270746f55696e7432345f6f766572666c6f7760781b6044820152606401610c79565b612713826003612f7c565b8351101561275a5760405162461bcd60e51b8152602060048201526014602482015273746f55696e7432345f6f75744f66426f756e647360601b6044820152606401610c79565b50016003015190565b6001600160a01b038116811461222257600080fd5b60008083601f84011261278a57600080fd5b5081356001600160401b038111156127a157600080fd5b6020830191508360208285010111156127b957600080fd5b9250929050565b6000806000604084860312156127d557600080fd5b83356127e081612763565b925060208401356001600160401b038111156127fb57600080fd5b61280786828701612778565b9497909650939450505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561285257612852612814565b604052919050565b60006001600160401b0382111561287357612873612814565b50601f01601f191660200190565b60006020828403121561289357600080fd5b81356001600160401b038111156128a957600080fd5b8201601f810184136128ba57600080fd5b80356128cd6128c88261285a565b61282a565b8181528560208385010111156128e257600080fd5b81602084016020830137600091810160200191909152949350505050565b60006020828403121561291257600080fd5b813561291d81612763565b9392505050565b80356001600160e01b03198116811461293c57600080fd5b919050565b6000806000806060858703121561295757600080fd5b843561296281612763565b935061297060208601612924565b925060408501356001600160401b0381111561298b57600080fd5b61299787828801612778565b95989497509550505050565b600080600080606085870312156129b957600080fd5b84356129c481612763565b9350602085013561297081612763565b600080604083850312156129e757600080fd5b82356129f281612763565b9150612a0060208401612924565b90509250929050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b0384168152604060208201819052600090612a579083018486612a09565b95945050505050565b60006001600160401b03821115612a7957612a79612814565b5060051b60200190565b600082601f830112612a9457600080fd5b8151612aa26128c88261285a565b8181526020856020848701011115612ab957600080fd5b60005b83811015612ad7578581018201518382018301528101612abc565b50506000918101602001919091529392505050565b60006020808385031215612aff57600080fd5b82516001600160401b0380821115612b1657600080fd5b818501915085601f830112612b2a57600080fd5b8151612b386128c882612a60565b81815260059190911b83018401908481019088831115612b5757600080fd5b8585015b83811015612b8f57805185811115612b735760008081fd5b612b818b89838a0101612a83565b845250918601918601612b5b565b5098975050505050505050565b634e487b7160e01b600052603260045260246000fd5b805160208201516001600160e01b03198082169291906004831015612be15780818460040360031b1b83161693505b505050919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561180057611800612be9565b805161293c81612763565b60008060408385031215612c3057600080fd5b8251612c3b81612763565b6020939093015192949293505050565b60208082526028908201527f76616c6964617465556e69737761705633506174683a20546f6b656e206e6f7460408201526708185b1b1bddd95960c21b606082015260800190565b60008060408385031215612ca657600080fd5b8251915060208301516001600160401b03811115612cc357600080fd5b612ccf85828601612a83565b9150509250929050565b600060018201612ceb57612ceb612be9565b5060010190565b6001600160a01b03851681526001600160e01b031984166020820152606060408201819052600090612d279083018486612a09565b9695505050505050565b600080600060608486031215612d4657600080fd5b8351612d5181612763565b602085015160408601519194509250612d6981612763565b809150509250925092565b602080825260119082015270151bdad95b881b9bdd08185b1b1bddd959607a1b604082015260600190565b600080600060608486031215612db457600080fd5b835192506020840151915060408401516001600160401b03811115612dd857600080fd5b612de486828701612a83565b9150509250925092565b60008085851115612dfe57600080fd5b83861115612e0b57600080fd5b5050820193919092039150565b6001600160e01b03198135818116916004851015612e405780818660040360031b1b83161692505b505092915050565b600080600080600060a08688031215612e6057600080fd5b85519450602080870151945060408701516001600160401b03811115612e8557600080fd5b8701601f81018913612e9657600080fd5b8051612ea46128c882612a60565b81815260059190911b8201830190838101908b831115612ec357600080fd5b928401925b82841015612eea578351612edb81612763565b82529284019290840190612ec8565b8097505050505050612efe60608701612c12565b9150608086015190509295509295909350565b600060208284031215612f2357600080fd5b815161291d81612763565b6020808252602e908201527f76616c69646174655f7472616e736665724552433230416c6c496e3a20546f6b60408201526d195b881b9bdd08185b1b1bddd95960921b606082015260800190565b8082018082111561180057611800612be9565b60208082526025908201527f76616c69646174653164656c7461506174683a20546f6b656e206e6f7420616c6040820152641b1bddd95960da1b606082015260800190565b60008060408385031215612fe757600080fd5b8251612ff281612763565b602084015190925061300381612763565b809150509250929050565b6000806000806080858703121561302457600080fd5b845161302f81612763565b60208601516040870151919550935061304781612763565b6060959095015193969295505050565b600060a0828403121561306957600080fd5b60405160a081016001600160401b03828210818311171561308c5761308c612814565b8160405282935084519150808211156130a457600080fd5b506130b185828601612a83565b82525060208301516130c281612763565b806020830152506040830151604082015260608301516060820152608083015160808201525092915050565b60006020828403121561310057600080fd5b81516001600160401b0381111561311657600080fd5b61312284828501613057565b94935050505056fe737761704578616374546f6b656e73466f72546f6b656e732875696e743235362c75696e743235362c616464726573735b5d2c616464726573732c75696e7432353629737570706c7928616464726573732c75696e743235362c616464726573732c75696e74313629776974686472617728616464726573732c75696e743235362c6164647265737329617070726f766544656c65676174696f6e28616464726573732c75696e74323536296578616374496e707574282862797465732c616464726573732c75696e743235362c75696e743235362c75696e743235362929666c6173685377617045786163744f75742875696e743235362c75696e743235362c627974657329666c617368537761704578616374496e2875696e743235362c75696e743235362c62797465732965786163744f7574707574282862797465732c616464726573732c75696e743235362c75696e743235362c75696e743235362929a2646970667358221220b603d69f408106e492212ff58c93c034be3d82476c7f60a6952e62d679f8ab1e64736f6c63430008170033","sourceMap":"472:2570:5:-:0;;;611:235;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;936:32:0;734:10:2;936:18:0;:32::i;:::-;674:13:5::1;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;666:5:5::1;:21:::0;;-1:-1:-1;;;;;666:21:5;;::::1;-1:-1:-1::0;;;;;;666:21:5;;::::1;::::0;::::1;::::0;;;-1:-1:-1;739:28:5;;;;::::1;::::0;;;::::1;::::0;::::1;::::0;;777:61:::1;::::0;;-1:-1:-1;;;777:61:5;;::::1;::::0;::::1;521:51:8::0;;;;588:18;;;581:30;647:2;627:18;;;620:30;686:27;666:18;;;659:55;666:21:5;777:17:::1;::::0;731:19:8;;777:61:5::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;611:235:::0;472:2570;;2426:187:0;2499:16;2518:6;;-1:-1:-1;;;;;2534:17:0;;;-1:-1:-1;;;;;;2534:17:0;;;;;;2566:40;;2518:6;;;;;;;2566:40;;2499:16;2566:40;2489:124;2426:187;:::o;472:2570:5:-;;;;;;;;:::o;14:290:8:-;84:6;137:2;125:9;116:7;112:23;108:32;105:52;;;153:1;150;143:12;105:52;179:16;;-1:-1:-1;;;;;224:31:8;;214:42;;204:70;;270:1;267;260:12;204:70;293:5;14:290;-1:-1:-1;;;14:290:8:o;309:447::-;472:2570:5;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405234801561001057600080fd5b50600436106100b45760003560e01c80638da5cb5b116100715780638da5cb5b1461014957806394217ad11461015a578063d13573361461016d578063d2f73e3d14610180578063e8e7f80014610149578063f2fde38b1461019357600080fd5b80631581b600146100b957806337cfecf2146100e95780634a0e159d146100fe5780636c57f5a914610111578063715018a61461012e5780637ceab3b114610136575b600080fd5b6002546100cc906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6100fc6100f73660046106b9565b6101a6565b005b6100fc61010c366004610726565b61034e565b6001546040516001600160a01b03909116151581526020016100e0565b6100fc610461565b6003546100cc906001600160a01b031681565b6000546001600160a01b03166100cc565b6001546100cc906001600160a01b031681565b6100fc61017b3660046106b9565b610475565b6100fc61018e366004610726565b61049f565b6100fc6101a13660046106b9565b61057f565b6101ae6105fa565b60035460408051632d670ec960e11b81526001600160a01b0384811660048301526024820192909252601a60448201527f496e697469616c206f776e65722063616e2077697468647261770000000000006064820152911690635ace1d9290608401600060405180830381600087803b15801561022a57600080fd5b505af115801561023e573d6000803e3d6000fd5b5050600354604080516372e548a960e01b81523060048201526024810191909152602560448201527f5661756c742063616e207265636569766520746f6b656e732066726f6d206120606482015264747261646560d81b60848201526001600160a01b0390911692506372e548a9915060a401600060405180830381600087803b1580156102cb57600080fd5b505af11580156102df573d6000803e3d6000fd5b505060035460405163f2fde38b60e01b81526001600160a01b038581166004830152909116925063f2fde38b9150602401600060405180830381600087803b15801561032a57600080fd5b505af115801561033e573d6000803e3d6000fd5b5050505061034b8161057f565b50565b6103566105fa565b6001546001600160a01b0316156103d25760035460015460405163299f87d560e21b81526001600160a01b039283169263a67e1f549261039f92911690869086906004016107a4565b600060405180830381600087803b1580156103b957600080fd5b505af11580156103cd573d6000803e3d6000fd5b505050505b600180546001600160a01b0319166001600160a01b0385169081179091551561045c57600354604051631f458b3960e31b81526001600160a01b039091169063fa2c59c890610429908690869086906004016107a4565b600060405180830381600087803b15801561044357600080fd5b505af1158015610457573d6000803e3d6000fd5b505050505b505050565b6104696105fa565b6104736000610654565b565b61047d6105fa565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b600354604051636d5025f160e01b81526001600160a01b0390911690636d5025f1906104d59033908790879087906004016107d2565b60006040518083038186803b1580156104ed57600080fd5b505afa158015610501573d6000803e3d6000fd5b50505050600080846001600160a01b03168484604051610522929190610809565b6000604051808303816000865af19150503d806000811461055f576040519150601f19603f3d011682016040523d82523d6000602084013e610564565b606091505b509150915081610578578051602082018181fd5b5050505050565b6105876105fa565b6001600160a01b0381166105f15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61034b81610654565b6000546001600160a01b031633146104735760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105e8565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116811461034b57600080fd5b6000602082840312156106cb57600080fd5b81356106d6816106a4565b9392505050565b60008083601f8401126106ef57600080fd5b50813567ffffffffffffffff81111561070757600080fd5b60208301915083602082850101111561071f57600080fd5b9250929050565b60008060006040848603121561073b57600080fd5b8335610746816106a4565b9250602084013567ffffffffffffffff81111561076257600080fd5b61076e868287016106dd565b9497909650939450505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b03841681526040602082018190526000906107c9908301848661077b565b95945050505050565b6001600160a01b038581168252841660208201526060604082018190526000906107ff908301848661077b565b9695505050505050565b818382376000910190815291905056fea26469706673582212206079472c105f7c72fe2df74f6f36084929e82eac7e09a62cafe38230686fb6b264736f6c63430008170033","sourceMap":"472:2570:5:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;547:30;;;;;-1:-1:-1;;;;;547:30:5;;;;;;-1:-1:-1;;;;;178:32:8;;;160:51;;148:2;133:18;547:30:5;;;;;;;;932:479;;;;;;:::i;:::-;;:::i;:::-;;2103:344;;;;;;:::i;:::-;;:::i;1882:99::-;1948:12;;1882:99;;-1:-1:-1;;;;;1948:12:5;;;:26;;1654:41:8;;1642:2;1627:18;1882:99:5;1514:187:8;1824:101:0;;;:::i;584:20:5:-;;;;;-1:-1:-1;;;;;584:20:5;;;1201:85:0;1247:7;1273:6;-1:-1:-1;;;;;1273:6:0;1201:85;;513:27:5;;;;;-1:-1:-1;;;;;513:27:5;;;1417:86;;;;;;:::i;:::-;;:::i;2453:586::-;;;;;;:::i;:::-;;:::i;2074:198:0:-;;;;;;:::i;:::-;;:::i;932:479:5:-;1094:13:0;:11;:13::i;:::-;1105:5:5::1;::::0;:68:::1;::::0;;-1:-1:-1;;;1105:68:5;;-1:-1:-1;;;;;2978:32:8;;;1105:68:5::1;::::0;::::1;2960:51:8::0;3027:18;;;3020:30;;;;3086:2;3066:18;;;3059:30;3125:28;3105:18;;;3098:56;1105:5:5;::::1;::::0;:30:::1;::::0;3171:19:8;;1105:68:5::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;1183:5:5::1;::::0;:75:::1;::::0;;-1:-1:-1;;;1183:75:5;;1211:4:::1;1183:75;::::0;::::1;3413:51:8::0;3480:18;;;3473:30;;;;3539:2;3519:18;;;3512:30;3578:34;3558:18;;;3551:62;-1:-1:-1;;;3629:19:8;;;3622:36;-1:-1:-1;;;;;1183:5:5;;::::1;::::0;-1:-1:-1;1183:19:5::1;::::0;-1:-1:-1;3675:19:8;;1183:75:5::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;1268:5:5::1;::::0;:31:::1;::::0;-1:-1:-1;;;1268:31:5;;-1:-1:-1;;;;;178:32:8;;;1268:31:5::1;::::0;::::1;160:51:8::0;1268:5:5;;::::1;::::0;-1:-1:-1;1268:23:5::1;::::0;-1:-1:-1;133:18:8;;1268:31:5::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;1379:25;1397:6;1379:17;:25::i;:::-;932:479:::0;:::o;2103:344::-;1094:13:0;:11;:13::i;:::-;2207:12:5::1;::::0;-1:-1:-1;;;;;2207:12:5::1;:26:::0;2204:95:::1;;2249:5;::::0;;2268:12;2249:39:::1;::::0;-1:-1:-1;;;2249:39:5;;-1:-1:-1;;;;;2249:5:5;;::::1;::::0;:18:::1;::::0;:39:::1;::::0;2268:12;::::1;::::0;2282:5;;;;2249:39:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;2204:95;2308:12;:28:::0;;-1:-1:-1;;;;;;2308:28:5::1;-1:-1:-1::0;;;;;2308:28:5;::::1;::::0;;::::1;::::0;;;2349:26;2346:95:::1;;2391:5;::::0;:39:::1;::::0;-1:-1:-1;;;2391:39:5;;-1:-1:-1;;;;;2391:5:5;;::::1;::::0;:17:::1;::::0;:39:::1;::::0;2409:13;;2424:5;;;;2391:39:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;2346:95;2103:344:::0;;;:::o;1824:101:0:-;1094:13;:11;:13::i;:::-;1888:30:::1;1915:1;1888:18;:30::i;:::-;1824:101::o:0;1417:86:5:-;1094:13:0;:11;:13::i;:::-;1482:5:5::1;:14:::0;;-1:-1:-1;;;;;;1482:14:5::1;-1:-1:-1::0;;;;;1482:14:5;;;::::1;::::0;;;::::1;::::0;;1417:86::o;2453:586::-;2601:5;;:48;;-1:-1:-1;;;2601:48:5;;-1:-1:-1;;;;;2601:5:5;;;;:18;;:48;;2620:10;;2632:6;;2640:8;;;;2601:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2719:12;2733:23;2760:6;-1:-1:-1;;;;;2760:11:5;2772:8;;2760:21;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2718:63;;;;2796:7;2792:241;;2877:10;2871:17;2944:4;2932:10;2928:21;2990:18;2973:15;2966:43;2792:241;2524:515;;2453:586;;;:::o;2074:198:0:-;1094:13;:11;:13::i;:::-;-1:-1:-1;;;;;2162:22:0;::::1;2154:73;;;::::0;-1:-1:-1;;;2154:73:0;;5252:2:8;2154:73:0::1;::::0;::::1;5234:21:8::0;5291:2;5271:18;;;5264:30;5330:34;5310:18;;;5303:62;-1:-1:-1;;;5381:18:8;;;5374:36;5427:19;;2154:73:0::1;;;;;;;;;2237:28;2256:8;2237:18;:28::i;1359:130::-:0;1247:7;1273:6;-1:-1:-1;;;;;1273:6:0;734:10:2;1422:23:0;1414:68;;;;-1:-1:-1;;;1414:68:0;;5659:2:8;1414:68:0;;;5641:21:8;;;5678:18;;;5671:30;5737:34;5717:18;;;5710:62;5789:18;;1414:68:0;5457:356:8;2426:187:0;2499:16;2518:6;;-1:-1:-1;;;;;2534:17:0;;;-1:-1:-1;;;;;;2534:17:0;;;;;;2566:40;;2518:6;;;;;;;2566:40;;2499:16;2566:40;2489:124;2426:187;:::o;222:131:8:-;-1:-1:-1;;;;;297:31:8;;287:42;;277:70;;343:1;340;333:12;358:247;417:6;470:2;458:9;449:7;445:23;441:32;438:52;;;486:1;483;476:12;438:52;525:9;512:23;544:31;569:5;544:31;:::i;:::-;594:5;358:247;-1:-1:-1;;;358:247:8:o;610:348::-;662:8;672:6;726:3;719:4;711:6;707:17;703:27;693:55;;744:1;741;734:12;693:55;-1:-1:-1;767:20:8;;810:18;799:30;;796:50;;;842:1;839;832:12;796:50;879:4;871:6;867:17;855:29;;931:3;924:4;915:6;907;903:19;899:30;896:39;893:59;;;948:1;945;938:12;893:59;610:348;;;;;:::o;963:546::-;1043:6;1051;1059;1112:2;1100:9;1091:7;1087:23;1083:32;1080:52;;;1128:1;1125;1118:12;1080:52;1167:9;1154:23;1186:31;1211:5;1186:31;:::i;:::-;1236:5;-1:-1:-1;1292:2:8;1277:18;;1264:32;1319:18;1308:30;;1305:50;;;1351:1;1348;1341:12;1305:50;1390:59;1441:7;1432:6;1421:9;1417:22;1390:59;:::i;:::-;963:546;;1468:8;;-1:-1:-1;1364:85:8;;-1:-1:-1;;;;963:546:8:o;3705:267::-;3794:6;3789:3;3782:19;3846:6;3839:5;3832:4;3827:3;3823:14;3810:43;-1:-1:-1;3898:1:8;3873:16;;;3891:4;3869:27;;;3862:38;;;;3954:2;3933:15;;;-1:-1:-1;;3929:29:8;3920:39;;;3916:50;;3705:267::o;3977:344::-;-1:-1:-1;;;;;4164:32:8;;4146:51;;4233:2;4228;4213:18;;4206:30;;;-1:-1:-1;;4253:62:8;;4296:18;;4288:6;4280;4253:62;:::i;:::-;4245:70;3977:344;-1:-1:-1;;;;;3977:344:8:o;4326:443::-;-1:-1:-1;;;;;4577:15:8;;;4559:34;;4629:15;;4624:2;4609:18;;4602:43;4681:2;4676;4661:18;;4654:30;;;4502:4;;4701:62;;4744:18;;4736:6;4728;4701:62;:::i;:::-;4693:70;4326:443;-1:-1:-1;;;;;;4326:443:8:o;4774:271::-;4957:6;4949;4944:3;4931:33;4913:3;4983:16;;5008:13;;;4983:16;4774:271;-1:-1:-1;4774:271:8:o","linkReferences":{}},"methodIdentifiers":{"assetManager()":"94217ad1","getWithdrawAddress()":"e8e7f800","guard()":"7ceab3b1","initialiseOwnership(address)":"37cfecf2","isDisabled()":"6c57f5a9","owner()":"8da5cb5b","performCall(address,bytes)":"d2f73e3d","renounceOwnership()":"715018a6","resetGuard(address)":"d1357336","transferOwnership(address)":"f2fde38b","updateAssetManager(address,string)":"4a0e159d","withdrawAddress()":"1581b600"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_assetManager\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"assetManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getWithdrawAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"guard\",\"outputs\":[{\"internalType\":\"contract GuardV0\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"initialiseOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isDisabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"name\":\"performCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract GuardV0\",\"name\":\"_guard\",\"type\":\"address\"}],\"name\":\"resetGuard\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_assetManager\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"updateAssetManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdrawAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getWithdrawAddress()\":{\"notice\":\"Allow single withdrawal destination. Preferably multisig/DAO treasury address.\"},\"initialiseOwnership(address)\":{\"notice\":\"Initialise vault and guard for a withdrawal destination.\"},\"isDisabled()\":{\"notice\":\"Asset manager can no longer trade on this vault. Emergency pause set by the governance. Disable with updateAssetManager().\"},\"updateAssetManager(address,string)\":{\"notice\":\"Change the asset manager. Set to zero address to disable asset manager.\"}},\"notice\":\"Simple vault allowing delegating of a trading activites to a hot wallet. - Self-contained - Guard is used to check asset manager can only perform approved operations. - No shares, single owner - No accounting - No slippage protection (unlike Enzyme)\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/SimpleVaultV0.sol\":\"SimpleVaultV0\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/=lib/openzeppelin-contracts/contracts/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin/=lib/openzeppelin-contracts/contracts/\"]},\"sources\":{\"lib/openzeppelin-contracts/contracts/access/Ownable.sol\":{\"keccak256\":\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fc980984badf3984b6303b377711220e067722bbd6a135b24669ff5069ef9f32\",\"dweb:/ipfs/QmPHXMSXj99XjSVM21YsY6aNtLLjLVXDbyN76J5HQYvvrz\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bd39944e8fc06be6dbe2dd1d8449b5336e23c6a7ba3e8e9ae5ae0f37f35283f5\",\"dweb:/ipfs/QmPV3FGYjVwvKSgAXKUN3r9T9GwniZz83CxBpM7vyj2G53\"]},\"lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"keccak256\":\"0xa92e4fa126feb6907daa0513ddd816b2eb91f30a808de54f63c17d0e162c3439\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a367861093b74443b137564d3f3c472f70bcf114739e62059c939f25e315706c\",\"dweb:/ipfs/Qmd7JMpcxD9RuQjK3uM3EzJUgSqdN8vzp8eytEiuwxQJ6h\"]},\"src/GuardV0.sol\":{\"keccak256\":\"0x26ebef3fcd081d578584bba1b83fd14e6890d9b150d1458c2e51f3781d9dfdad\",\"urls\":[\"bzz-raw://d28b1816517f51101c33391dcddf36320f7e6c84e37ea9e9e2a6648034a9c6f0\",\"dweb:/ipfs/QmeRkLiNABnpUCu5XA9UKVkZ5VZV7yTnhogwwcz7v8sTwU\"]},\"src/IGuard.sol\":{\"keccak256\":\"0xb7b3ef010870980bd812779fd5dc8133d6dccb0e2b5d390dcfdc7a61c5064559\",\"urls\":[\"bzz-raw://17226392a130d807b0e1cd46f3b3fa8bf36d4f4cac6218f09d2dca75605945a3\",\"dweb:/ipfs/QmYgn6g7B2wU6VYrhtZicWohw795yyu6qUD1riWaG2hikD\"]},\"src/SimpleVaultV0.sol\":{\"keccak256\":\"0x28de4090f998d49a9e829c2bbf4d18f68774c2e0df71d9347f7d28a633fa8358\",\"urls\":[\"bzz-raw://f859db4a725bc09d1556103b93ae48c166b74482d7c5417a22a6e3088125f1e4\",\"dweb:/ipfs/QmcyuWDou6L57FVsid9dbfqq3uDqo3iYrDyiEAiTpo1EBM\"]},\"src/lib/BytesLib.sol\":{\"keccak256\":\"0x7446c0f0de6eb147f0f3e40b3a72e39d02a951e8c453437dcc6b3c06007bc62a\",\"license\":\"Unlicense\",\"urls\":[\"bzz-raw://1b2b64668ea4287dfe75e1029fef387b0e3ae191b784d1bc5be01edac6d1d5c5\",\"dweb:/ipfs/Qma3zAe3Svez1kdGc5F356m9tRjCDg8F8tAocbd5Qk13PE\"]},\"src/lib/Path.sol\":{\"keccak256\":\"0xb22c562b5175d50dbcc2224325666090d985f052abdcfe275c8dfc884e34de61\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://27aeff27314476ab3c77313ae1f0c5b2442b86315f5ce741cb2150a87c3cbad3\",\"dweb:/ipfs/QmQNno2g1CJvjnH6ych4LuHr1UZDEZPACgYG4XvivxGrqV\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.23+commit.f704f362"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"_assetManager","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"previousOwner","type":"address","indexed":true},{"internalType":"address","name":"newOwner","type":"address","indexed":true}],"type":"event","name":"OwnershipTransferred","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"assetManager","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getWithdrawAddress","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"guard","outputs":[{"internalType":"contract GuardV0","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"initialiseOwnership"},{"inputs":[],"stateMutability":"view","type":"function","name":"isDisabled","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes","name":"callData","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"performCall"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"renounceOwnership"},{"inputs":[{"internalType":"contract GuardV0","name":"_guard","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"resetGuard"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"transferOwnership"},{"inputs":[{"internalType":"address","name":"_assetManager","type":"address"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"updateAssetManager"},{"inputs":[],"stateMutability":"view","type":"function","name":"withdrawAddress","outputs":[{"internalType":"address","name":"","type":"address"}]}],"devdoc":{"kind":"dev","methods":{"owner()":{"details":"Returns the address of the current owner."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."}},"version":1},"userdoc":{"kind":"user","methods":{"getWithdrawAddress()":{"notice":"Allow single withdrawal destination. Preferably multisig/DAO treasury address."},"initialiseOwnership(address)":{"notice":"Initialise vault and guard for a withdrawal destination."},"isDisabled()":{"notice":"Asset manager can no longer trade on this vault. Emergency pause set by the governance. Disable with updateAssetManager()."},"updateAssetManager(address,string)":{"notice":"Change the asset manager. Set to zero address to disable asset manager."}},"version":1}},"settings":{"remappings":["@openzeppelin/=lib/openzeppelin-contracts/contracts/","ds-test/=lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin/=lib/openzeppelin-contracts/contracts/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/SimpleVaultV0.sol":"SimpleVaultV0"},"evmVersion":"paris","libraries":{}},"sources":{"lib/openzeppelin-contracts/contracts/access/Ownable.sol":{"keccak256":"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218","urls":["bzz-raw://fc980984badf3984b6303b377711220e067722bbd6a135b24669ff5069ef9f32","dweb:/ipfs/QmPHXMSXj99XjSVM21YsY6aNtLLjLVXDbyN76J5HQYvvrz"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"keccak256":"0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305","urls":["bzz-raw://bd39944e8fc06be6dbe2dd1d8449b5336e23c6a7ba3e8e9ae5ae0f37f35283f5","dweb:/ipfs/QmPV3FGYjVwvKSgAXKUN3r9T9GwniZz83CxBpM7vyj2G53"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Context.sol":{"keccak256":"0xa92e4fa126feb6907daa0513ddd816b2eb91f30a808de54f63c17d0e162c3439","urls":["bzz-raw://a367861093b74443b137564d3f3c472f70bcf114739e62059c939f25e315706c","dweb:/ipfs/Qmd7JMpcxD9RuQjK3uM3EzJUgSqdN8vzp8eytEiuwxQJ6h"],"license":"MIT"},"src/GuardV0.sol":{"keccak256":"0x26ebef3fcd081d578584bba1b83fd14e6890d9b150d1458c2e51f3781d9dfdad","urls":["bzz-raw://d28b1816517f51101c33391dcddf36320f7e6c84e37ea9e9e2a6648034a9c6f0","dweb:/ipfs/QmeRkLiNABnpUCu5XA9UKVkZ5VZV7yTnhogwwcz7v8sTwU"],"license":null},"src/IGuard.sol":{"keccak256":"0xb7b3ef010870980bd812779fd5dc8133d6dccb0e2b5d390dcfdc7a61c5064559","urls":["bzz-raw://17226392a130d807b0e1cd46f3b3fa8bf36d4f4cac6218f09d2dca75605945a3","dweb:/ipfs/QmYgn6g7B2wU6VYrhtZicWohw795yyu6qUD1riWaG2hikD"],"license":null},"src/SimpleVaultV0.sol":{"keccak256":"0x28de4090f998d49a9e829c2bbf4d18f68774c2e0df71d9347f7d28a633fa8358","urls":["bzz-raw://f859db4a725bc09d1556103b93ae48c166b74482d7c5417a22a6e3088125f1e4","dweb:/ipfs/QmcyuWDou6L57FVsid9dbfqq3uDqo3iYrDyiEAiTpo1EBM"],"license":null},"src/lib/BytesLib.sol":{"keccak256":"0x7446c0f0de6eb147f0f3e40b3a72e39d02a951e8c453437dcc6b3c06007bc62a","urls":["bzz-raw://1b2b64668ea4287dfe75e1029fef387b0e3ae191b784d1bc5be01edac6d1d5c5","dweb:/ipfs/Qma3zAe3Svez1kdGc5F356m9tRjCDg8F8tAocbd5Qk13PE"],"license":"Unlicense"},"src/lib/Path.sol":{"keccak256":"0xb22c562b5175d50dbcc2224325666090d985f052abdcfe275c8dfc884e34de61","urls":["bzz-raw://27aeff27314476ab3c77313ae1f0c5b2442b86315f5ce741cb2150a87c3cbad3","dweb:/ipfs/QmQNno2g1CJvjnH6ych4LuHr1UZDEZPACgYG4XvivxGrqV"],"license":"GPL-2.0-or-later"}},"version":1},"id":5} \ No newline at end of file diff --git a/tests/guard/test_guard_simple_vault_aave_v3.py b/tests/guard/test_guard_simple_vault_aave_v3.py new file mode 100644 index 00000000..ffcc46a8 --- /dev/null +++ b/tests/guard/test_guard_simple_vault_aave_v3.py @@ -0,0 +1,318 @@ +"""Check guard against Aave v3 calls. + +- Check Aave v3 access rights + +- Check general access rights on vaults and guards +""" + +import logging +import os +import shutil + +import pytest +from eth_account import Account +from eth_account.signers.local import LocalAccount +from eth_tester.exceptions import TransactionFailed +from eth_typing import HexAddress, HexStr +from web3 import EthereumTesterProvider, Web3 +from web3._utils.events import EventLogErrorFlags +from web3.contract import Contract + +from eth_defi.aave_v3.constants import MAX_AMOUNT, AaveV3InterestRateMode +from eth_defi.aave_v3.deployment import AaveV3Deployment +from eth_defi.aave_v3.deployment import fetch_deployment as fetch_aave_deployment +from eth_defi.aave_v3.loan import supply, withdraw +from eth_defi.abi import get_contract, get_deployed_contract, get_function_selector +from eth_defi.deploy import deploy_contract +from eth_defi.hotwallet import HotWallet +from eth_defi.provider.anvil import fork_network_anvil, mine +from eth_defi.provider.multi_provider import create_multi_provider_web3 +from eth_defi.simple_vault.transact import encode_simple_vault_transaction +from eth_defi.token import create_token, fetch_erc20_details +from eth_defi.trace import ( + TransactionAssertionError, + assert_transaction_success_with_explanation, +) + +pytestmark = pytest.mark.skipif( + (os.environ.get("JSON_RPC_POLYGON") is None) or (shutil.which("anvil") is None), + reason="Set JSON_RPC_POLYGON env install anvil command to run these tests", +) + +POOL_FEE_RAW = 3000 + + +@pytest.fixture +def large_usdc_holder() -> HexAddress: + """A random account picked from Polygon that holds a lot of USDC. + + This account is unlocked on Anvil, so you have access to good USDC stash. + + `To find large holder accounts, use `_. + """ + # Binance Hot Wallet 6 + return HexAddress(HexStr("0xe7804c37c13166fF0b37F5aE0BB07A3aEbb6e245")) + + +@pytest.fixture +def anvil_polygon_chain_fork(request, large_usdc_holder) -> str: + """Create a testable fork of live Polygon. + + :return: JSON-RPC URL for Web3 + """ + mainnet_rpc = os.environ["JSON_RPC_POLYGON"] + launch = fork_network_anvil( + mainnet_rpc, + unlocked_addresses=[large_usdc_holder], + fork_block_number=51_000_000, + ) + try: + yield launch.json_rpc_url + finally: + # Wind down Anvil process after the test is complete + launch.close(log_level=logging.ERROR) + + +@pytest.fixture +def web3(anvil_polygon_chain_fork: str): + """Set up a Web3 provider instance with a lot of workarounds for flaky nodes.""" + web3 = create_multi_provider_web3(anvil_polygon_chain_fork) + return web3 + + +@pytest.fixture +def usdc(web3) -> Contract: + """Get USDC on Polygon.""" + return fetch_erc20_details(web3, "0x2791bca1f2de4661ed88a30c99a7a9449aa84174").contract + + +@pytest.fixture +def ausdc(web3): + """Get aPolUSDC on Polygon.""" + return fetch_erc20_details(web3, "0x625E7708f30cA75bfd92586e17077590C60eb4cD", contract_name="aave_v3/AToken.json").contract + + +@pytest.fixture +def weth(web3) -> Contract: + """Get WETH on Polygon.""" + return fetch_erc20_details(web3, "0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619").contract + + +@pytest.fixture +def aave_v3_deployment(web3) -> AaveV3Deployment: + return fetch_aave_deployment( + web3, + pool_address="0x794a61358D6845594F94dc1DB02A252b5b4814aD", + data_provider_address="0x69FA688f1Dc47d4B5d8029D5a35FB7a548310654", + oracle_address="0xb023e699F5a33916Ea823A16485e259257cA8Bd1", + ) + + +@pytest.fixture() +def deployer(web3, usdc, large_usdc_holder) -> str: + """Deploy account. + + Do some account allocation for tests. + """ + address = web3.eth.accounts[0] + + usdc.functions.transfer( + address, + 500_000 * 10**6, + ).transact({"from": large_usdc_holder}) + + return address + + +@pytest.fixture() +def owner(web3) -> str: + return web3.eth.accounts[1] + + +@pytest.fixture() +def asset_manager(web3) -> str: + return web3.eth.accounts[2] + + +@pytest.fixture() +def third_party(web3) -> str: + return web3.eth.accounts[3] + + +@pytest.fixture() +def vault( + web3: Web3, + usdc: Contract, + ausdc: Contract, + deployer: str, + owner: str, + asset_manager: str, + aave_v3_deployment: AaveV3Deployment, +) -> Contract: + """Mock vault.""" + vault = deploy_contract(web3, "guard/SimpleVaultV0.json", deployer, asset_manager) + + assert vault.functions.owner().call() == deployer + vault.functions.initialiseOwnership(owner).transact({"from": deployer}) + assert vault.functions.owner().call() == owner + assert vault.functions.assetManager().call() == asset_manager + + guard = get_deployed_contract(web3, "guard/GuardV0.json", vault.functions.guard().call()) + assert guard.functions.owner().call() == owner + + aave_pool_address = aave_v3_deployment.pool.address + note = "Allow Aave v3" + tx_hash = guard.functions.whitelistAaveV3(aave_pool_address, note).transact({"from": owner}) + receipt = web3.eth.get_transaction_receipt(tx_hash) + assert len(receipt["logs"]) == 3 + + # check Aave pool was approved + assert guard.functions.isAllowedApprovalDestination(aave_pool_address).call() + + # Check Aave pool call sites was enabled in the receipt + call_site_events = guard.events.CallSiteApproved().process_receipt(receipt, errors=EventLogErrorFlags.Ignore) + supply_selector = get_function_selector(aave_v3_deployment.pool.functions.supply) + withdraw_selector = get_function_selector(aave_v3_deployment.pool.functions.withdraw) + + assert call_site_events[0]["args"]["notes"] == note + assert call_site_events[0]["args"]["selector"].hex() == supply_selector.hex() + assert call_site_events[0]["args"]["target"] == aave_pool_address + + assert call_site_events[1]["args"]["notes"] == note + assert call_site_events[1]["args"]["selector"].hex() == withdraw_selector.hex() + assert call_site_events[1]["args"]["target"] == aave_pool_address + + assert guard.functions.isAllowedCallSite(aave_pool_address, supply_selector).call() + assert guard.functions.isAllowedCallSite(aave_pool_address, withdraw_selector).call() + + guard.functions.whitelistToken(usdc.address, "Allow USDC").transact({"from": owner}) + guard.functions.whitelistToken(ausdc.address, "Allow aUSDC").transact({"from": owner}) + assert guard.functions.callSiteCount().call() == 6 + + return vault + + +@pytest.fixture() +def guard( + web3: Web3, + vault: Contract, +) -> Contract: + return get_deployed_contract(web3, "guard/GuardV0.json", vault.functions.guard().call()) + + +def test_vault_initialised( + owner: str, + asset_manager: str, + vault: Contract, + guard: Contract, + usdc: Contract, + ausdc: Contract, + aave_v3_deployment: AaveV3Deployment, +): + """Vault and guard are initialised for the owner.""" + assert guard.functions.owner().call() == owner + assert vault.functions.assetManager().call() == asset_manager + assert guard.functions.isAllowedSender(asset_manager).call() is True + assert guard.functions.isAllowedWithdrawDestination(owner).call() is True + assert guard.functions.isAllowedWithdrawDestination(asset_manager).call() is False + assert guard.functions.isAllowedReceiver(vault.address).call() is True + + # We have accessed needed for Aave v3 + pool = aave_v3_deployment.pool + assert guard.functions.callSiteCount().call() == 6 + assert guard.functions.isAllowedApprovalDestination(pool.address) + assert guard.functions.isAllowedApprovalDestination(aave_v3_deployment.pool.address) + assert guard.functions.isAllowedCallSite(pool.address, get_function_selector(pool.functions.supply)).call() + assert guard.functions.isAllowedCallSite(pool.address, get_function_selector(pool.functions.withdraw)).call() + assert guard.functions.isAllowedCallSite(usdc.address, get_function_selector(usdc.functions.approve)).call() + assert guard.functions.isAllowedCallSite(usdc.address, get_function_selector(usdc.functions.transfer)).call() + assert guard.functions.isAllowedCallSite(ausdc.address, get_function_selector(ausdc.functions.approve)).call() + assert guard.functions.isAllowedAsset(usdc.address).call() + assert guard.functions.isAllowedAsset(ausdc.address).call() + + +def test_guard_can_do_aave_supply( + web3: Web3, + aave_v3_deployment: AaveV3Deployment, + asset_manager: str, + deployer: str, + vault: Contract, + guard: Contract, + usdc: Contract, + ausdc: Contract, + weth: Contract, +): + usdc.functions.transfer(vault.address, 50_000 * 10**6).transact({"from": deployer}) + usdc_amount = 10_000 * 10**6 + + fn_calls = supply( + aave_v3_deployment=aave_v3_deployment, + token=usdc, + amount=usdc_amount, + wallet_address=vault.address, + ) + for fn_call in fn_calls: + target, call_data = encode_simple_vault_transaction(fn_call) + tx_hash = vault.functions.performCall(target, call_data).transact({"from": asset_manager}) + assert_transaction_success_with_explanation(web3, tx_hash, tracing=True) + + assert usdc.functions.balanceOf(vault.address).call() == pytest.approx(40_000 * 10**6) + assert ausdc.functions.balanceOf(vault.address).call() == pytest.approx(usdc_amount) + + # Shouldn't allow to supply WETH + approve_fn, supply_fn = supply( + aave_v3_deployment=aave_v3_deployment, + token=weth, + amount=1 * 10**18, + wallet_address=vault.address, + ) + with pytest.raises(TransactionAssertionError, match="Call site not allowed"): + target, call_data = encode_simple_vault_transaction(approve_fn) + tx_hash = vault.functions.performCall(target, call_data).transact({"from": asset_manager}) + assert_transaction_success_with_explanation(web3, tx_hash, tracing=True) + with pytest.raises(TransactionAssertionError, match="Token not allowed"): + target, call_data = encode_simple_vault_transaction(supply_fn) + tx_hash = vault.functions.performCall(target, call_data).transact({"from": asset_manager}) + assert_transaction_success_with_explanation(web3, tx_hash, tracing=True) + + +def test_guard_can_do_aave_withdraw( + web3: Web3, + aave_v3_deployment: AaveV3Deployment, + asset_manager: str, + deployer: str, + vault: Contract, + guard: Contract, + usdc: Contract, + ausdc: Contract, + weth: Contract, +): + usdc.functions.transfer(vault.address, 50_000 * 10**6).transact({"from": deployer}) + usdc_amount = 10_000 * 10**6 + + fn_calls = supply( + aave_v3_deployment=aave_v3_deployment, + token=usdc, + amount=usdc_amount, + wallet_address=vault.address, + ) + for fn_call in fn_calls: + target, call_data = encode_simple_vault_transaction(fn_call) + tx_hash = vault.functions.performCall(target, call_data).transact({"from": asset_manager}) + assert_transaction_success_with_explanation(web3, tx_hash, tracing=True) + + assert usdc.functions.balanceOf(vault.address).call() == pytest.approx(40_000 * 10**6) + assert ausdc.functions.balanceOf(vault.address).call() == pytest.approx(usdc_amount) + + withdraw_fn = withdraw( + aave_v3_deployment=aave_v3_deployment, + token=usdc, + amount=5_000 * 10**6, + wallet_address=vault.address, + ) + target, call_data = encode_simple_vault_transaction(withdraw_fn) + tx_hash = vault.functions.performCall(target, call_data).transact({"from": asset_manager}) + assert_transaction_success_with_explanation(web3, tx_hash, tracing=True) + + assert usdc.functions.balanceOf(vault.address).call() == pytest.approx(45_000 * 10**6) + assert ausdc.functions.balanceOf(vault.address).call() == pytest.approx(5_000 * 10**6)